https://developer.apple.com/documentation/DISPATCH
DispatchQueue는 GCD (Grand Central Dispatch)의 핵심 요소로, 작업을 비동기적으로 실행하거나, 특정 작업을 동기적으로 실행하는 데 사용되는 큐입니다. 멀티스레드 프로그래밍을 간소화하기 위해 설계되었으며, 애플의 모든 플랫폼에서 사용할 수 있습니다.
Dispatch
: 보내다, 발송하다.Queue
: 큐. 자료구조 . 중큐를 의미.DispatchQueue.{큐종류}.{qos옵션}.{sync/async/after/barrier} {
// 수행할 작업 코드 작성
}
// 큐 종류: Main / Global / Custom
// qos: Quality Of Service
// sync: 동기적으로 작업 수행
// async: 비동기적으로 작업 수행
DispatchQueue.main.async {
// UI 업데이트 코드
self.label.text = "작업 완료!"
}
GlobalQueue 사용
DispatchQueue.global().async {
// 네트워크 통신 또는 계산이 무거운 작업을 백그라운드에서 수행
let result = self.someHeavyComputation()
DispatchQueue.main.async {
// 결과를 메인 스레드에서 UI에 반영
self.updateUI(with: result)
}
}
Custom Queue 사용
// label 에 큐의 고유한 이름 설정.
// attributes 에 serial/concurrent 설정.
// 설정하지 않으면 default 값은 serial.
let customQueue = DispatchQueue(
label: "com.myapp.customqueue",
attributes: .concurrent
)
customQueue.async {
// 커스텀 큐에서 실행할 작업
}
작업의 중요도를 시스템에 알려주는 방법.
이를 통해 시스템은 리소스(CPU 시간, 에너지 등)를 효율적으로 분배할 수 있다.
이 작업이 어느정도의 중요도인지를 OS 에게 알리고 작업을 할당하는데 도움을 준다고 이해 가능.
1.async
DispatchQueue.global().async {
print("Run task asynchronously")
}
2. sync
DispatchQueue.global().sync {
print("Run task synchronously")
}
3. after
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
print("Task executed after 2 seconds")
}
4. barrier
let concurrentQueue = DispatchQueue(label: "com.example.concurrentQueue", attributes: .concurrent)
concurrentQueue.async(flags: .barrier) {
print("Barrier task")
}