본문 바로가기
ios

DispatchQueue 종류 세 가지

by 고고 2021. 12. 21.

1. Main Queue

2. Global Queue

3. Custom Queue

 

* 디스패치큐는 큐의 특성에 맞게 큐가 알아서 스레드에 자기 task를 분배합니다. 프로그래머는 그저 task를 큐에 넣어주면 됩니다.

 

1. Main Queue

- Serial(직렬) 큐

- 딱 한 개의 큐

- 스레드는 메인스레드 딱 한 개만! (UI 업데이트 처리)

 

메인 큐는 스레드가 하나밖에 없기 때문에 Serial Queue가 되는 것이 당연합니다.

 

+) 코드를 작성할 때에 별도의 처리를 하지 않는 이상 모든 일들은 메인 스레드가 작업하게 됩니다.

 

 

2. Global Queue

- Concurrent(동시) 큐

- QoS(Quality of Service)에 따라 6종류로 나뉨

 

QoS는 작업의 중요도를 결정합니다.

 

 

소요시간과 종류를 중요도 순으로 나열하자면,

 

userInteractive - 거의 즉시

사용자와 상호작용 하는 작업. (UI 업데이트, 애니메이션 등) 

 

userInitiated  - 몇 초

유저가 즉시 필요하긴 하지만, 비동기적으로 처리된 작업 (pdf파일 열기 등)

 

default - 디폴트

일반적인 작업

 

utility - 몇 초 ~ 몇 분

보통 progress bar와 함께 길게 실행되는 작업. (계산, IO, 네트워킹 등)

 

background - 몇 분 이상; 속도 < 에너지 효율성

유저가 직접적으로 인지하지 않는 시간이 덜 중요한 작업. (데이터 미리 가져오기, 데이터베이스 유지 등)

 

unspecified

legacy API 지원

 

 

Qos가 높은 큐 A와 낮은 큐 B가 있는데, 둘의 task 량은 같습니다. 이 둘이 동시에 실행될 때 iOS는

A가 더 우선적으로 중요한 일임을 인지하고

A에 더 많은 스레드를 배치하고, 배터리를 더 집중적으로 사용하게 합니다.

 

 

만약에 아래 예시같이 큐의 QoS와 task의 QoS가 다르다면?

 

1. Queue QoS < Task QoS = 큐의 품질 상승.

let queue = DispatchQueue.global(qos: .background).async(qos: .utility)

 

2. Queue QoS > Task QoS = Task의 품질 상승.

let queue = DispatchQueue.global(qos: .utility).async(qos: .background)

 

더 높은 QoS로 통일되는군요.

 

 

3. Custom Queue

- 디폴트: Serial(직렬).

- 직렬 / 동시 둘 다 가능.

- QoS 설정 가능.

 

let queue = DispatchQueue(label: "com.inflearn.serial")
let queue = DispatchQueue(label: "com.inflearn.serial", attributes: .concurrent)

 

QoS를 설정하지 않으면 OS가 알아서 추론합니다.

 

 

 

 

참고 출처 : https://www.inflearn.com/course/iOS-Concurrency-GCD-Operation/dashboard

 

iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션

동시성(Concurrency)프로그래밍 - iOS프로그래밍에서 필요한 동기, 비동기의 개념 및 그를 확장한 GCD 및 Operation에 관한 모든 내용을 다룹니다., ✍️ 강의 제작 동기 '왜 동기vs비동기 개념, 직렬vs병

www.inflearn.com

 

'ios' 카테고리의 다른 글

GCD에서 의도치 않은 교착상태를 피하는 법  (0) 2021.12.22
DispatchQueue 교착상태  (0) 2021.12.22
동기/비동기, 직렬/동시  (0) 2021.12.21
Error: realm accessed from incorrect thread  (0) 2021.11.19
[iOS] Carthage 전환 후기  (0) 2021.11.18

댓글