728x90
DispatchQueue
- 앱의 main 스레드 혹은 백그라운드 스레드에서 연속적으로(serially) 혹은 동시에(concurrently) task들을 실행할 수 있도록 관리해주는 객체
- DispatchQueue로 제출된 task들은 시스템에 의해 관리되는 thread pool 위에서 실행된다.
- Main 스레드를 제외하고는 시스템은 해당 task가 어떤 스레드를 사용하는지 보증해주지 않는다.
- Schedule work item들은 동기적으로(synchronously) 혹은 비동기적(asynchronously)으로 실행된다.
- private Queue를 여러 개 만드는 대신, global Queue 중에 하나로 task를 제출함으로써 너무 많은 스레드들이 생성되는 것을 방지 할 수 있다.
Serial Queue vs Concurrent Queue
- Serial Queue
- 작업들이 한 번에 하나씩 순서대로 실행되는 큐
- Concurrent Queue
- 여러 작업들이 동시에 실행되는 큐
Sync vs Async
- Sync
- 해당 work item의 실행이 끝날 때까지 코드가 기다린다.
- Async
- 코드가 work item이 실행 완료될 때까지 기다리지 않고 계속 실행된다.
Main Queue, Global Queue, Private Queue
- Main Queue
- serial queue
- UI 관련 작업들을 실행하는 main thread에서 동작하는 큐
- Global Queue
- concurrent queue
- 시스템에서 main Queue와 함께 기본적으로 제공되는 큐
- QOS (Quality of Service) : 큐의 우선순위를 지정할 수 있다.
- Private Queue
- queue의 라벨과 속성을 지정해서 만들어낼 수 있는 새로운 큐
QOS (Quality of Service)
이름 | 설명 |
.userInteractive | main thread에서 실행해야하는 UI 관련 작업, 애니메이팅 등의 user와 직접적인 상호작용을 하는 작업 - 소요시간: 매우짧음 |
.userInitiated | 사용자가 시작한 작업이며 파일 열기, 클릭 이벤트와 같이 즉각적인 결과를 얻어내야하지만 작업이 끝난 후에 의미가 있는 경우 - 소요시간: 수초 혹은 더 적음 |
'default' | qos가 할당되지 않은 global 큐의 작업은 default로 실행된다. |
.utility | - 데이터 다운로드와 같이 즉각적인 결과가 필요하지 않은 작업 - 대표적으로 progress bar, networking, I/O, 계산 - 소요시간: 수초 ~ 수분 |
.background | - 데이터 동기화, 백업 등 사용자가 볼 수 없는 백그라운드에서 동작하는 작업들 - 시간보다는 에너지 효율성을 고려하는 작업 - 아이폰이 저전력 모드일 땐, 작업이 일시 중단된다. - 소요시간: 수분 ~ 수시간 |
728x90
'iOS > 설명' 카테고리의 다른 글
[iOS] Location 권한 관련 (Deferred Permission) (0) | 2021.09.18 |
---|---|
[iOS] 아이폰의 해상도 (0) | 2021.09.18 |
[iOS] iOS의 화면 표현구조 (0) | 2021.07.06 |
[iOS] NSClassFromString (0) | 2021.07.05 |
[iOS] translatesAutoresizingMaskIntoConstraints (0) | 2021.06.17 |
댓글