티스토리 뷰

iOS/iOS 개발

iOS - Dispatch Queue

포도 동 2021. 5. 21. 17:18

GCD (Grand Central Dispatch) - DispatchQueue란?

앱의 기본 스레드 또는 백그라운드 스레드에서 작업 실행을 직렬 또는 동시에 관리하는 개체.

 

정의

class DispatchQueue: DispatchObject
  • 디스패치 큐는 애플리케이션이 블록 객체 형태로 작업을 제출할 수있는 FIFO 큐이다.
  • 디스패치 큐는 작업을 직렬 또는 동시에 실행합니다.
  • 디스패치 큐에 올라온 작업은 시스템에서 관리하는 스레드 풀에서 실행됩니다.
  • 앱의 기본 스레드를 나타내는 디스패치 큐를 제외하고 시스템은 작업을 실행하는 데 사용하는 스레드에 대해 보장하지 않습니다.
  • 작업 항목을 동기 또는 비동기 적으로 예약할 수 있습니다.
    • 작업 항목을 동기적으로 예약하면 해당 항목이 실행을 마칠 때까지 코드가 대기합니다.
    • 작업 항목을 비동기 적으로 예약하면 작업 항목이 다른 곳에서 실행되는 동안 코드가 계속 실행됩니다.
  • 메인 큐에서 작업의 동기적 실행을 시도하면 교착상태가 발생합니다.

 

Serial Queue

  • 동시에 1개의 작업만 수행한다.
  • 작업을 언제 수행하는지는 GCD에서 제어한다.
  • 하나의 작업이 끝나고 다음 작업을 시작하기까지 걸리는 시간을 우리는 알 수 없다.

 

Concurrent Queue

  • 동시에 여러 작업을 수행할 수 있다.
  • 큐에 추가된 순서대로 작업이 시작되도록 보장한다.
  • 작업은 시작 순서에 상관없이 완료될 수 있다.
  • 다음 작업을 시작하는 데 걸리는 시간이나, 현재 실행중인 작업에 수에 대해서는 알 수 없다.

 

< GCD에서 제공하는 Queue의 종류 >

Main Queue

  • 메인 스레드에서 실행되는 Serial Queue.

Global Queue

  • 전체 시스템이 공유하는 Concurrent Queue
  • 우선 순위가 서로 다른 4개의 Queue가 있음.
    • high, default, low, background

Custom Queue

  • Serial 또는 Concurrent 모두 가능한 Queue.
  • 이 작업은 실제로 Global Queue에서 끝남.

 

< Sync (Synchronous) / Async (Asynchronous) >

Sync

  • 작업이 완료된 후에 Queue에게 제어권을 넘김.
  • 작업이 끝나기 전까지 Queue가 block되어 진행중인 작업이 끝날 때까지 기다려야함.

Async

  • 작업을 수행할 다른 Queue에게 작업을 넘기자마자, 현재 Queue에게 제어권을 돌려줌.
  • 작업이 끝날때까지 기다리지 않으며, 현재의 Queue도 block되지 않음.

 

- 참고

developer.apple.com/documentation/dispatch/dispatchqueue/

https://www.raywenderlich.com/5370-grand-central-dispatch-tutorial-for-swift-4-part-1-2

 

'iOS > iOS 개발' 카테고리의 다른 글

iOS - BlendShapes 활용하기  (0) 2021.05.27
ARKit - BlendShapes  (0) 2021.05.25
iOS ActionSheet 만들기  (0) 2021.01.14
iOS앱 Lottie 애니메이션 구현하기  (0) 2020.11.29
XCODE프로젝트에 코코아팟(CocoaPods) 설치하기  (0) 2020.11.29
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함