앱의 Main Thread 또는 Background Thread에서 작업의 순차적(Serially) 또는 연속적(concurrently)으로 실행을
관리하는 객체
App이 블록 객체 형태로 작업을 제출할 수 있는 FIFO Queue
DispatchQueue는 작업을 직렬(Serially) 또는 동시(Concurrently)에 실행
제출된 작업은 System이 관리하는 Thread에서 실행 가능
앱의 Main Thread를 나타내는 DispatchQueue를 제외하고 System은 작업을 실행하는데 어떤 Thread를 사용하는지 보장하지 않음
작업 항목을 synchronously(동기) 또는 asynchronously(비동기)로 예약
작업 항목을 synchronously(동기)로 예약하면 해당 항목의 실행이 완료될 때까지대기함
작업 항목을 asynchronously(비동기)로 예약하면 작업 항목이 다른 곳에서 실행되는 동안코드가 계속 실행됨 ※ Main Thread에서 작업항목을 동기(sync)로 실행하려고 하면 교착 상태(Deadlock)가 발생함
과도한 Thread 생성 방지
동시(concurrent) 실행을 위한 작업을 설계할 때 현재 실행 Thread에서 차단하는 method를 호출하지 마세요 → 동시 DispatchQueue에 의해 예약된 작업이 Thread를 차단하면 System은 queue(대기열)에 있는 다른 동시 작업을 실행하기 위해 추가 Thread를 생성 → 너무 많은 작업이 차단되면 System에서 App Thread가 부족해질 수 있음