iOS 에서 제공하는 멀티스레딩을 위한 API에는 세 종류가 있다.
Objective-C 기반의 고수준 API
NSOperation
을 NSOperationQueue
에 추가하여 실행DispatchQueue
를 사용GCD 에선 DispatchQueue를 통해 작업을 관리한다.
✅ DispatchQueue 에는 두 가지 타입이 존재한다. - Serial Queue, Concurrent Queue
✅ DispatchQueue 는 애플리케이션 실행과 동시에 2개의 큐가 자동 생성된다. - Main Queue, Global Queue
Main Queue (Serial Queue)
public class var main: DispatchQueue { get }
메인 스레드에서 사용되는 Queue.
UI 관련 작업을 이곳에서 처리해야 함
Main Queue 에 작업을 추가하고 싶다면 아래와 같이 할 수 있다
DispatchQueue.main.async {
// 원하는 작업
// DispatchQueue 중 main queue 에 async 로 작업을 추가하겠다는 의미.
}
Main Queue 에는 절대 Sync Task 를 추가할 수 없음 - 메인 스레드가 Thread-Safe 하지 않기 때문. (main.sync
: 런타임 에러)
Global Queue (Concurrent Queue)
public class func global(qos: DispatchQoS.QoSClass = .default) -> DispatchQueue
편의상 사용할 수 있게 만들어져 있는 Concurrent Queue 이다.
QoS 를 지원한다 : 우선 순위(priority)를 직접 명시할 수 있음
Global Queue 에 작업을 추가하고 싶다면 아래와 같이 할 수 있다
DispatchQueue.global().sync {
// 원하는 작업
// DispatchQueue 중 global queue 에 sync 로 작업을 추가하겠다는 의미
}
DispatchQueue.global().async {
// 원하는 작업
// DispatchQueue 중 global queue 에 async 로 작업을 추가하겠다는 의미
}
DispatchQueue.global(qos: .userInteractive).sync {
// 원하는 작업
// 이와 같이 QoS 를 직접 지정할 수도 있다.
}