해당 포스팅은 iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해 강의를 수강하고 개인적으로 정리한 내용을 기록한 것 입니다.
대기열(Queue)은 여러 종류와 갯수가 있으며 각 대기열의 특성이 다르다. 작업의 특성, 원하는 일처리에 따라 대기열의 특성에 맞게 작업을 보내야한다.
이번 포스팅에서는 이러한 대기열의 종류와 특성에 대해 기록하고자 한다.
디스패치 큐의 종류
- 메인(main): 유일함(한 개), serial, 메인 스레드(DispatchQueue.main)
- 글로벌(global): 종류 여러 개, concurrent(기본 설정), QoS(6종류)
- 프라이빗(custom): 디폴트 생성은 serial, 변경 가능(concurrent로), 사용자화 디스패치 큐
메인 스레드 예시)
글로벌 큐 예시)
프라이빗 큐 예시)
QoS: Quality of Service
글로벌 큐의 서비스 품질을 의미한다. 총 5가지가 있으며(Unspecified는 거의 사용하지 않는다.) 번호가 낮을 수록 우선 순위가 높다.
- UserInteractive [거의 즉시]: 유저와 직접적 인터렉티브(UI 업데이트, 애니메이션, UI 반응 등과 같은 사용자와 상호작용하는 작업)
- UserInitiated [몇 초]: 유저가 즉시 필요하긴 하지만, 비동기적으로 처리된 작업 (ex. 앱 내에서 pdf 파일 열기)
- Default: 일반적인 작업
- Utility [몇 초에서 몇 분]: 보통 Progress Indicator와 함께 길게 실행되는 작업, 계산, IO, Networking, 지속적인 데이터 feeds
- Background [속도보다는 에너지 효율성 중시, 몇 분 이상]: 유저가 직접적으로 인지하지 않고 시간이 중요하지 않은 작업. 데이터 미리 가져오기, 데이터베이스 유지
- Unspecified: legacy API
큐와 작업 수준이 다를 때
-> 더 높은 우선 순위를 따라 상승한다.