GCD
현재 사용 중인 스레드에서 글로벌 큐로 비동기로 작업을 보내다.
DispatchQueue.global().async {
}
아래 코드는 실질적으로는 메인스레드에서 실행된다.
DispatchQueue.global().sync {
}
(1)
DispatchQueue.global().async {
task1
}
(2)
DispatchQueue.global().async {
tast2
}
글로벌큐는 기본적으로 동시 큐이기 때문에 (1), (2) 실행 시 동시적으로 실행된다.
(3)
DispatchQueue.global().sync {
task1
}
(4)
DispatchQueue.global().async {
tast2
}
(3), (4) 실행 시 (3)작업이 끝난 후 (4)가 실행된다.
let serialQueue = DispatchQueue(label: "Serial1")
(1)
serialQueue.async {
task1
}
(2)
serialQueue.async {
task1
}
(1), (2) 실행 시 (1) 번 작업을 비동기를 보냈음에도 시리얼큐이기 때문에 (1)번 작업이 끝난 이후 (2) 번 작업이 실행된다.
let serialQueue2 = DispatchQueue(label: "Serial2")
(3)
serialQueue.async {
task1
}
(4)
serialQueue2.async {
task1
}
(3), (4) 실행 시 각 실행되는 큐(serialQueue, serialQueue2)가 다르기 때문에 동시적으로 실행된다.
DispatchQueue.global().async {
let serialQueue = DispatchQueue(label: "Serial1")
serialQueue.async {
task
}
let serialQueue2 = DispatchQueue(label: "Serial2")
serialQueue2.async {
task
}
}
동시 큐 안에서 시리얼 큐 1,2를 비동기적으로 실행 시 동시에 실행이 된다.
헷갈렸던 것 ⇒ 글로벌 동시 큐 안에 시리얼 큐 생성 시
글로벌 동시큐 내부 작업순서대로 실행되며 새로 생성된 시리얼 큐는 개별적으로 실행된다.