본문 바로가기
iOS/설명

[iOS] DispatchQueue

by Sky Titan 2021. 7. 26.
728x90
 

Apple Developer Documentation

 

developer.apple.com

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

  1. Serial Queue
    • 작업들이 한 번에 하나씩 순서대로 실행되는 큐
  2. Concurrent Queue
    • 여러 작업들이 동시에 실행되는 큐

 

Sync vs Async

  1. Sync
    1. 해당 work item의 실행이 끝날 때까지 코드가 기다린다.
  2. Async
    1. 코드가 work item이 실행 완료될 때까지 기다리지 않고 계속 실행된다.

 

Main Queue, Global Queue, Private Queue

  1. Main Queue
    • serial queue
    • UI 관련 작업들을 실행하는 main thread에서 동작하는 큐
  2. Global Queue
    • concurrent queue
    • 시스템에서 main Queue와 함께 기본적으로 제공되는 큐
    • QOS (Quality of Service) : 큐의 우선순위를 지정할 수 있다.
  3. 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

댓글