→ 큐마다 특성이 존재하고 각 큐의 특성에 맞는 작업을 보내면 된다.
DispachQueue.main.async{
print("print something") // -> 1번 스레드에서 일을 한다.
}
DispatchQueue.main.asyncAfter(.now()+2){} // -> 2초후 일을 진행한다.
⇒ 다음 코드들은 오류를 가져온다 기본값이 메인큐에서 실행되기 때문에 프로그래머가 메인코드에 작업을 넣는 일은 시스템 상에서 막아 놓은거 같다.
기본설정이(concurrent)
qos에 맞게 테스크가 쓰레드에 배치되는 것 같다.

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

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

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