GCD(Grand Central Dispatch)라고도 알려진, Dispatch는 macOS, iOS, watchOS, tvOS에서 멀티코어 하드웨어에서의 동시 코드 실행을 지원하기 위한 시스템적, 포괄적인 개선사항으로 언어기능, 런타임 라이브러리 및 시스템 개선을 포함한다.
DispatchQueue는 앱의 메인 스레드나 백그라운드 스레드에서 순차적으로 또는 동시에 실행되는 작업을 관리하는 개체입니다. DispatchQueue는 애플리케이션이 블록 객체 형태로 작업을 제출할 수 있는 FIFO Queue로, DispatchQueue는 작업을 순차적으로 또는 동시에 실행합니다.
위 코드의 실행결과는 실행할 때마다 달라진다. 왜냐하면 concurrent특성을 갖는 DispatchQueue는 처리 순서가 할당된 작업이 끝나는 순서이기 때문이다. 예를 들면 실행 결과는0
1
2
3
4 // serial DispatchQueue
2
3
1
0
4 // concurrent DispatchQueue
0
1
2
3
4 // serial DispatchQueue
0
1
2
3
4 // concurrent DispatchQueue
위 코드의 수행 결과도 GlobalDispatchQueue에 의해 여러가지 결과가 나올 수 있다.
- UserInteractive : 애니메이션, 이벤트 처리 또는 앱의 사용자 인터페이스 업데이트와 같은 사용자 대화형 작업에 대한 QOS
- UserInitiated : 사용자가 앱을 active하게 사용하지 못하게 하는 작업에 대한 QOS
- Default : 가장 기본값
- Utility : 사용자가 active하게 추적하지 않는 작업에 대한 QOS
- Background : 유지보수 또는 클린업 작업에 대한 QOS
MainQueue를 Sync로 선언할 경우, MainQueue에서 메인 스레드에 작업을 할당하지만, 메인스레드는 sync 상태에서 작업이 끝날때까지 작업을 처리하지 않기 때문에 deadlock 상태에 빠지게 된다.Apple Developer Documentation - Swift
https://developer.apple.com/documentation/dispatch
Blog - 개발하는 훈이, [Swift] GCD(Grand Central Dispatch) - DispatchQueue
https://jeonyeohun.tistory.com/279#comment13319592
Blog - 서근 개발노트, Swift : 기초문법 [DispatchQueue란?] (GCD : Grand Central Dispatch)
https://seons-dev.tistory.com/215