Swift에서 DispatchQueue를 사용할 때, DispatchQueue.main.async, DispatchQueue.main.asyncAfter, DispatchQueue.global(qos: .background) 위주로 많이 사용을 했었는데 기본적인 옵션을 사용했을땐 어떻게 되는지 확인하기위해 포스팅 작성!
기본적인건데 너무 이걸 헷갈려했다니 -_-
직렬 DispatchQueue
- 직렬 DispatchQueue는 한 번에 하나의 작업만 실행
- 작업이 제출된 순서대로 실행되며, 하나의 작업이 완료된 후 다음 작업이 시작
ex) let serialQueue = DispatchQueue(label: “com.example.serialQueue”)
동시 DispatchQueue
- 동시 DispatchQueue는 여러 작업을 동시에 실행
- 작업들은 제출된 순서에 관계없이 동시에 실행될 수 있으며, 실행 시작 순서는 보장되지만, 완료 순서는 작업의 실행 시간에 따라 달라질 수 있다
- ex) let concurrentQueue = DispatchQueue(label: “com.example.concurrentQueue”, attributes: .concurrent)
동기(Sync) vs 비동기(Async) 호출
동기(sync) 호출은 현재 스레드가 작업의 완료를 기다린다. 동기 호출을 사용하면 제출된 작업이 완료될 때까지 현재 스레드의 실행 차단!!
비동기(async) 호출은 현재 스레드가 작업의 완료를 기다리지 않고 즉시 다음 코드 라인으로 넘어간다 비동기 호출을 사용하면 작업이 백그라운드에서 실행되며, 현재 스레드는 작업이 완료되기를 기다리지 않고 즉시 다음 작업 계속 진행한다.