💥 비동기(Async) vs 동기(Sync)
❓비동기(Async)
- 작업을 다른 스레드로 보낸 후 작업이 끝나기를 기다리지 않는다.
- 기다리지 않기 때문에 다음 작업을 진행할 수 있다.
❓동기(Sync)
- 다른 스레드에 작업을 시키고, 끝날 때까지 기다린다.
- 작업이 끝날 때까지 다른 작업을 시작할 수 없다.
💥 직렬(Serial)큐 vs 동시(Concurrent)큐
큐의 특성에 따라 나뉘어짐
❓직렬(Serial)큐
- Queue에서 받은 테스크들을 단 하나의 다른 쓰레드로 보내는 큐
- 한 번에 하나의 테스크를 순차적으로 실행
- 순서가 중요한 작업을 처리할 때
- Main Thread에서 사용되는 Queue(Main Queue)
❓동시(Concurrency)큐
- Queue에서 받은 테스크들을 다른 여러개의 쓰레드로 보내는 큐
- 여러개의 쓰레드에서 동시에 일 처리를 하게 분산처리
- 각자가 독립적이지만 유사한 여러개의 작업을 처리할 때 사용
❗️코드로서의 예시
func task1() {
print("Task 1 시작")
sleep(1)
print("Task 1 완료")
}
func task2() {
print("Task 2 시작")
print("Task 2 완료")
}
func task3() {
print("Task 3 시작")
sleep(4)
print("Task 3 완료")
}
func task5() {
print("Task 5 시작")
print("Task 5 완료")
}
// 비동기 작업
DispatchQueue.global().async {
task1()
}
DispatchQueue.global().async {
task2()
}
DispatchQueue.global().async {
task3()
}
task1()
task2()
task3()
task4()
task5()
// Task 1 시작
// Task 2 시작
// Task 3 시작
// Task 2 완료
// Task 1 완료
// Task 3 완료
// 동기 작업
DispatchQueue.global().sync {
task1()
}
DispatchQueue.global().sync {
task2()
}
DispatchQueue.global().sync {
task3()
}
// Task 1 시작
// Task 1 완료
// Task 2 시작
// Task 2 완료
// Task 3 시작
// Task 3 완료