GCD Pt.1

Zion·2022년 3월 2일
1

GCD

목록 보기
1/1

동기와 비동기처리 방법인 GCD를 어디서부터 정리해야 할 지 모르겠어서 일단 WWDC15를 봤다.
코드에 적용시키는 그날까지🥊

Grand Central DispatchQueue

GCD의 full name이다.
옛날 게시글에 Thread가 뭔지 설명해놨다.
GCD를 사용하면 Thread관리를 쉽게 만들 수 있게 해준다.

필요한 상황을 설명해 보겠다.

0. 그림에서 보다시피 Main Thread에서 UIAppDelegate로 Delegate Method Callout을 보낸다.
1. UIAppDelegate에서 Database에 있는 data를 가져온다.

지연없이 한번에 data를 가져온다면 완전 땡큐다. 하지만 삶이 호락호락하지 않듯이 data를 가져오는것도 호락호락하게 한번에 되지 않을경우가 있다. 그럼 지연이 발생한다. data를 가져올 때까지 UI Update 또한 지연된다.

			이러한 경우를 해결하려고 우리는 GCD를 사용할것이다.


GCD를 사용한 Diagram이다. 비동기 Queue를 생성하고, Data 이전 그림에서 UIAppDelegate에서 가져왔었던 data를 이제 GCD Queue에서 가져온다. 비동기 즉 ascync 작업인만큼 이전의 UIAppDelegate의 역할이 줄어들었다.

QoS?

= Quality of Service
시스템은 QoS 정보를 사용하여 Scheduling, CPU, I/O 처리량, 타이머 대기 시간과 같은 우선순위를 조정한다. 결과적으로 작업 성능(performance)과 에너지 효율성(energy efficiency) 사이의 균형을 유지한다.

작업에다 QoS를 할당할 때 사용자에게 어떻게 영향을 미치는지, 다른작업에 어떻게 영향을 미치는지 고려해야한다. 각각의 기본 4개의 다른 QoS 클래스를 살펴보자.

종류

  • User-interactive
  • User-initiated
  • Utility
  • Background

User-interactive
사용자와 상호작용 하는 작업, 기본 스레드에서 작동중인 것같은, 사용자 인터페이스 새로고침 또는 애니메이션을 수행합니다. 작업이 빠르게 수행되지 않으면 사용자 인터페이스가 멈추어(frozen) 있는것 처럼 보일수 있습니다. 반응성과 성능에 중점을 둡니다.

작업은 거의 순간에 실행되는 작업입니다.

User-initiated
사용자가 시작하고 즉각적인 결과가 필요한 작업, 저장된 문서를 열거나, 사용자가 사용자 인터페이스에서 무언가를 클릭할때 동작을 수행합니다. 사용자와 상호작용을 계속하려면 사용자의 주문이 필요합니다. 반응성과 성능에 중점을 둡니다.

작업은 거의 순간에 실행되거나, 몇초 혹은 그보다 빠른 작업입니다.

Utility
작업을 완료하는데 약간의 시간이 걸리며 즉각적인 결과가 필요하지 않은 작업, 데이터 다운로드 또는 데이터 가져오기(importing)같은 작업을 수행할수 있습니다. 유틸리티(Utility)작업은 사용자가 볼수 있는 진행상황(progress bar)을 가집니다. 반응성, 성능 및 에너지 효율성간에 균형을 유지하는데 중점을 둡니다.

Background
작업은 몇 초에서 몇분 정도 필요한 작업입니다.
뒤에(background)에서 동작하며 사용자가 볼수 없는 작업, 색인, 동기화 및 백업 입니다. 에너지 효율성에 중점을 둡니다.

작업에 상당한시간이 걸리고 몇분 또는 몇 시간 이 필요한 작업입니다.

Special Quality of Service Class

기본 QoS 클래스 이외에 두가지 특수 유형의 QoS가 있습니다. 대부분의 경우 이 클래스와 상호 작용 하지 않습니다.

Default
Default는 user-initiated 와 utility의 사이의 어딘가 우선 순위 수준입니다. 이 QoS는 개발자가 작업을 분류하는데 사용하기 위한것이 아닙니다. QoS정보가 Default로서 할당되지 않은 작업입이며 GCD전역 큐(GCD Global queue)가 해당 레벨에서 실행됩니다.

Unspecified
QoS정보가 없음을 시스템에 신호를 줍니다. 해당 QoS의 환경에서 추론되어야 합니다. 스레드가 레거시 API를 사용하는 경우 unspecified QoS를 가질수 있습니다.

Terminology

- Sync
- Async
- Concurrent, Concurrency
profile
어제보다만 나아지는

0개의 댓글