DispatchQueue의 종류와 특성

brick·2023년 2월 28일
0

Concurrency Programming

목록 보기
2/6
post-thumbnail

종류

mainglobalprivate
개수1개여러개여러개
Serial VS ConcurrnetSerialConcurrentSerial
(default)
QosX설정 가능OS가 추론, 설정도 가능


Main Queue

  • UI 처리를 담당한다
  • 메인쓰레드 == 메인큐
  • Serial
  • 유일한 한개
DispatchQueue.main.async {}

// 일반적으로 main 쓰레드에서 동기로 작동한다.
// 실제로 하면 교착상태 위험이 있는 코드이다.
DispatchQueue.main.sync {} 


Global Queue

  • Concurrent
  • 여러개
  • Qos 6종류가 있다.
DispatchQueue.global().async {}

// 유저와 직접적 상호작용, UI업데이트, 애니메이션, UI반응 관련 - 거의 즉시
DispatchQueue.global(qos: .userInteractive)

// 유저가 즉시 필요하긴 하지만, 비동기적으로 처리된 작업 - 몇초
DispatchQueue.global(qos: .userInitiated)

// 일반적인 작업
DispatchQueue.global()

// 보통 Progress Indicator와 함께 길게 실행되는 작업, 계산 - 몇초~몇분
DispatchQueue.global(qos: .utility)

// 속도보다는 에너지효율성 중시, 몇분이상
DispatchQueue.global(qos: .background)

// legacy API 지원(사용하지 않는다.)
DispatchQueue.global(qos: .unspecified)
  • queue의 품질보다 높은 품질로 작업을 보내면 더 높은 품질로 상승한다.
// background qos queue
let queue = DispatchQueue.global(qos: .background)

// 작업을 보낼 때 더 높은 level로 보낸다(background -> utility)
queue.async(qos: .utility) { }


Private Queue

  • Serial가 default, Concurrent도 가능
let queue = DispatchQueue(label: "aabbcc")

let queue2 = DispatchQueue(label: "ccddee",
                           qos: .userInteractive,
                           attributes: .concurrent)


참고

0개의 댓글