728x90
바로 목차 ㄱ
- Main Queue
- 글로벌 큐와 Qos의 이해
- Custom Queue
GCD(디스패치 큐)의 종류와 특성
Queue의 종류
- 디스패치 큐
- 메인 큐
- 글로벌 큐
- 프라이빗 큐
- 오퍼레이션 큐
Main Queue
- 유일하게 1개
- 직렬 (Serial)
- 메인 쓰레드 = 메인 큐
- 1번 쓰레드 = 메인 쓰레드 = 메인 큐
- 유일
- 코드로 작성하면 DispatchQueue.main 으로 작성할 수 있다.
// main으로 보낸다.
DiapatchQueue.main.async {
// 내부 코드 -> 1번 쓰레드에서 일을 한다.
}
DispatchQueue.main.asyncAfter(.now() + 2) {
}
위 코드의 의미는
✔️ 메인 큐로 작업을 보내는데,
✔️ 비동기적으로 보내고,
✔️ 지금으로부터 2초 뒤에
보낸다. 는 것이다.
Global Queue
글로벌 큐는 6가지 우선순위(Qos)에 따라서 나뉘어지는데 default 값은 concurrent이다.
위로 올라갈수록 우선순위가 높다.
🤔 왜 이렇게 중요도가 나타나는가?
(= 글로벌 큐를 종류로 나누는 것이 어떤 의미가 있는가?)
중요도/우선순위에 따라서 작업의 순서가 달라지는데, 보통 사용자와 근접할수록 우선순위가 높다.
DispatchQueue.global( ).async {
// task1
}
DispatchQueue.global(qos: .userInitiated ).async {
// task2
}
위와 같은 우선순위를 갖고 있는 큐에 작업 1과 작업 2를 보낸다고 할 때,
작업 1은 기본적으로 .default 로 보내지므로 작업 2의 우선순위가 더 높다고 할 수 있다.
중요도에 따라서 다른 큐로 작업을 보낸다는 것은
작업 2가 더 중요한 큐로 보내졌다는 것을 의미한다.
즉, iOS가 알아서 우선적으로 중요한 일이라는 것을 인지하여
= 작업 2가 더 빠르게 처리되도록 하고
= 쓰레드에 우선순위를 매겨
= 더 많은 쓰레드를 배치하여
= 배터리를 우선순위가 높은 작업에 더 집중적으로 사용할 수 있도록 한다.
🤔 큐의 우선순위를 .background로 했는데, 보내는 작업의 서비스 품질이 높다면?
// 백그라운드로 정의 let queue = DispatchQueue.global(qos: .background) // 작업을 보낼때 더 높은 수준으로 보냄 queue.async(qos: .utility) { }
→ 큐의 품질이 미리 설정한 .background가 아니라 작업의 영향을 받아서
→ .utility로 상승
Custom Queue
기본 설정은 직렬, 원하면 concurrent도 가능, Qos도 설정할 수 있다.
// 레이블만 붙이면 됨
let queue = DispatchQueue(label: “com.inflearn.serial”)
// 커스텀/프라이빗 큐는 동시큐로 설정도 가능
let queue2 = DispatchQueue(label: “com.inflearn.concurrent”, attributes: .concurrent)
-> 작업에 대해서 커스텀 큐의 경우, 우선 순위를 설정하지 않아도 OS가 알아서 추론한다.
'iOS' 카테고리의 다른 글
[App Store Connect] 앱 정보 작성 (0) | 2022.09.16 |
---|---|
Custom Navigation Back Gesture (0) | 2022.09.10 |
[Concurrency] 동시성 프로그래밍 (0) | 2022.09.06 |
[Memo] 메모 앱을 만들어보자. (절정) (0) | 2022.09.06 |
[Memo] 메모 앱을 만들어보자. (위기) (2) | 2022.09.06 |