GCD의 종류 - 메인큐, 글로벌큐와 Qos, 프라이빗(커스텀) 큐

→ 큐마다 특성이 존재하고 각 큐의 특성에 맞는 작업을 보내면 된다.

1. 메인 큐

DispachQueue.main.async{
	print("print something") // -> 1번 스레드에서 일을 한다.
}

DispatchQueue.main.asyncAfter(.now()+2){} // -> 2초후 일을 진행한다.

⇒ 다음 코드들은 오류를 가져온다 기본값이 메인큐에서 실행되기 때문에 프로그래머가 메인코드에 작업을 넣는 일은 시스템 상에서 막아 놓은거 같다.

2. 글로벌큐와 Qos

기본설정이(concurrent)

qos에 맞게 테스크가 쓰레드에 배치되는 것 같다.

스크린샷 2022-02-04 오후 4.02.55.png

DispatchQeue.global(.qos: “큐오에스 종류”).async{}

구분 상황 소요시간
.userInteractive UI업데이트, 에니메이션, UI반응 관련 모든 것(사용자와 상호작용하기 때문에 빠르게 처리되어야 함) 거의 즉시
.userInitiated 유저가 즉시 필요하긴 하지만, 비동기적으로 처리된 작업(pdf 파일 열기 , DB읽기 ) 몇초
.default 일반적인 작업 -
.utility 보통 Progress Indicator와 함께 길게 실행되는 작업, 계산 (IO,Networking, 지속적인 데이터 feeds) 몇초에서 몇분
.background 유저가 직접적으로 인지하지 않고(시간이 중요하지 않은) 작업(디비 미리가져오기, 데이터베이스 유지보수, 동기화 ...) 몇분이상 (에너지효율)
.unspecified lagacy API 지원 -

동작 예시

스크린샷 2022-02-04 오후 4.14.50.png

다음과 같이 큐에 작업이 들어온 상황이다.

스크린샷 2022-02-04 오후 4.16.12.png

다음과 같은 방식으로 우선순위에 따라 쓰레드에 배치된다.