한 스레드에 너무 많은 일을 시키니가 중간 테스크마다 텀이 김
스레드 분산을 시키지 않음
in ios 대기 행렬(큐)에만 보내면 됨 → 동시성 프로그래밍
os가 알아서 분산 처리 시킴
대기 행렬(큐)의 종류에 GCD(Grand Central Dispatch) , Operation이 있다
(글로벌) 메인 큐
유일한 1개의 큐, 메인 스레드에서 동작함
Serial 큐 - 큐랑 스레드 1:1 매칭 테스크가 서로 의존적일때 (순서가중요한 작업들을 처리할때)
1번 스레드는 메인 큐이자 메인 스레드
화면처리는 1번 스레드에서 담당
DispatchQueue.global().async {
//image donwload task
code
DispachQueue.main().async {
// image ui update
self.imageView.image = image
}
}
// URLSession API는 내부적으로 비동기 처리가 되어있음
URLSession.shared.dataTask(with: url){
//image download
code
DispachQueue.main().async {
// image ui update
self.imageView.image = image
}
}
글로벌 큐
종류가 6개 Qos(서비스 품질)
디폴트는 concurrent → 여러개 스레드를 사용함 → 순서가 중요하지 않은 작업들이어야함
Concurrent 큐 - 한개의 큐에서 여러개 의 스레드로 분산 처리시킴( 갯수는 OS가 결정함)
Qos
DispatchQueue.global().async {
// Task 1
} * 4
DispatchQueue.global(qos: .userInitiated).async {
// Task 2
} * 4
프라이빗(커스텀) 큐
Serial , Concurrent 설정 가능 qos도 설정 가능
qos 미설정 시 ios가 작업을 판단해서 qos를 추론