한마디로 '일하는 녀석들'
여러개의 스레드가 있음에도 불구하고 지금까지는 화면을 관리하는 main thread 하나에만 일을 시켰음 (나머지 스레드는 모두 Background Thread) -> 따라서 부하가 걸려 버벅이는 현상 발생
여러개의 스레드에서 일을 하도록 하는 것
DispatchQueue.global().async{
// task
}
- DispatchQueue : 큐에 보낼거다
- global() : 글로벌 큐에
- async : 비동기적으로
let queue = DispatchQueue.global()
queue.async{
// task
}
- 보낼 큐의 종류를 미리 선언하고, 그 큐를 사용
우리는 queue(대기열)만 만들어서 작업을 보내주기만 하면 iOS가 스레드를 만들어서 관리해주는 방법 2가지
원래 작업이 진행되고 있던 곳(메인스레드)에서 큐로 작업을 보내고, 그 작업이 완료되는 것을 기다리지 않고 다시 메인스레드로 돌아와서 다음 작업을 처리
작업을 시키고 해당 작업이 완료될 때까지 기다림
큐가 받아들이는 작업을 모두 다른 한개의 스레드에만 보냄
=> 순서가 중요한 작업 처리시 사용
큐가 받아들이는 작업을 다른 여러개의 스레드에 보냄
=> 각자 독립적이지만 유사한 여러개의 작업 처리시 사용
ex) 아래와 같이 각자 하나하나의 셀에서 이미지를 불리하는 작업이 동시적으로 이루어질 경우

userInteractive
userInitiated
default
세번째로 높은 우선 순위이자 기본 값
앱 초기화 혹은 유저를 대신해 수행하는 작업에 사용
utility
default보다 한단계 낮은 우선순위
바로 완료되지 않아도 앱사용에 지장이 없는 부가적인 작업에 사용
background
https://www.inflearn.com/course/iOS-Concurrency-GCD-Operation
https://jcsoohwancho.github.io/2019-10-09-DispatchQueue%EC%9D%98Qos/