1번 쓰레드(Main Thread)에 몰려있는 작업을 다른 여러 개의 쓰레드로 분산 처리하여 작업하는 방식을 "동시성"이라 부릅니다.
이러한 동시성 방식은 작업의 시간과 종료의 순서가 다릅니다. (대기행렬 큐(Queue)에서 작업을 임의로 분산 처리하기 때문)
🤔 하지만 작업의 시작/종료 순서가 중요하면 어떻게 해야 할까??
-> 직렬 큐(Serial Queue)를 사용!!
동시성 방식으로 프로그래밍할 경우 작업의 시작/종료 순서가 그때그때 다릅니다.
func work_1(){ print("작업1 시작") sleep(2) print("종료1\n") } func work_2(){ print("작업2 시작") sleep(2) print("종료2\n") } func work_3(){ print("작업3 시작") sleep(2) print("종료3\n") } DispatchQueue.global().async { work_1() } DispatchQueue.global().async { work_2() } DispatchQueue.global().async { work_3() } /* 출력 결과 작업1 시작 작업3 시작 작업2 시작 종료2 종료1 종료3 */
작업의 시작/종료 순서가 중요하다면 직렬 큐(Serial Queue)를 사용하면 됩니다.
하지만 직렬 큐의 경우에는 일정 작업의 묶음을 통째로 다른 쓰래드에게 분산처리 하는 방식이기 때문에 버벅임의 문제가 발생할 수 있습니다.
func work_1(){ print("작업1 시작") sleep(2) print("종료1\n") } func work_2(){ print("작업2 시작") sleep(2) print("종료2\n") } func work_3(){ print("작업3 시작") sleep(2) print("종료3\n") } let serialQueue = DispatchQueue(label: "임의의_이름") serialQueue.async { work_1() } serialQueue.async { work_2() } serialQueue.async { work_3() } /* 출력 결과 작업1 시작 종료1 작업2 시작 종료2 작업3 시작 종료3 */