티스토리 뷰

GCD (Grand Central Dispatch)

  • 동시성을 제공하기 위해 사용하는 API
  • Queue에 작업을 보내면 알아서 스레드를 할당하고 안전하게 수행
  • GCD에서 사용하는 Queue의 이름이 Dispatch Queue
  • 즉, DispatchQueue에 작업을 추가하면 GCD는 작업에 맞는 스레드를 자동으로 생성해서 실행하고, 작업이 종료되면 스레드를 제거

 

동시성 프로그래밍

- 싱글코어 환경에서 멀티태스킹을 위해 시간을 분할해서 여러 프로세스와 스레드를 번갈아가며 실행함이 과정이 너무 빠르다 보니 동시에 실행되는 것처럼 보이는 것을 말함

- 싱글 코어(멀티 코어에서도 가능)에서 멀티스레드를 동작시키키 위한 방식

 

queue.sync { task } 동기 vs queue.async { task } 비동기

  • 동기는 데이터의 요청과 결과가 한 자리에서 동시에 일어나는 것을 의미
  • 비동기는 데이터의 요청과 결과가 동시에 일어나지 않는다는 의미

 

Serial (직렬) vs Concurrent (동시)

  • Serial Queue
    • 분산 처리 시킨 작업을 "한개의 스레드에서" 처리하는 큐
    • task의 시작과 종료에 대한 순서 예측이 가능
    • 늦게 실행 된 것이 먼저 끝나는 상황 방지
    • 느림
  • Concurrent Queue
    • 분산 처리 시킨 작업을 "여러 개의 스레드에서" 처리하는 큐
    • 끝나는 순서는 알 수 없음
    • 빠름

 

DispatchQueue의 타입

(1) Main Queue

  • 메인 쓰레드에서 작동하는 큐로, UI 요소와 관련된 부분들을 담당
  • Serial Queue

(2) Global Queue

  • 모든 시스템에 공유되는 Concurrent Queue
  • QoS를 통해 우선순위를 관리 할 수 있음
    • userInteractive : 애니메이션, 이벤트 처리나 지연이 적은 작업 등에 사용 (사용자와 직접 상호작용 하는 작업)
    • userInitiated: 사용자가 즉각적인 결과를 기다리고 있고 UI 상호 작용을 계속하는 데 필요한 작업에 사용 (거의 바로 수행)
    • default:userInitiated보다 덜 중요한 일반적인 작업
    • utility : Progress indicator가 보이는 것과 같은 오래 걸리느(수초 ~ 수분 걸리는 작업)
    • background : 사용자 인식에 관계없는 작업(영상 다운로드 등)

(3) Custom Queue

  • 직접 만드는 Queue
  • 디폴트로 serial 특성을 가진 Queue지만 concurrent로 설정 가능
  • Qos 설정 가능

 

GCD 사용 시 주의 사항

1) UI는 main 스레드에서 처리함

2-1) Main Queue에서 다른 Queue로 작업을 보낼 때 sync를 사용하면 안됨

  1. 메인 스레드는 UI를 업데이트 해야하는데, 다른 작업들이 끝날 때까지 기다린다면 해당 작업이 끝날 때까지 UI업데이트가 지연되기 때문에 안됨

2-2) 현재와 같은 Queue에 sync로 작업을 보내면 안됨

  1. 같은 Queue에 보내면 같은 스레드에 배치될 수 있는데, 해당 스레드가 sync로 인해 멈춰있는 상황이라면 데드락 상황이 발생함
  2. 다른 Qos 큐라면 데드락 발생 가능성이 없음
  3. 따라서 메인 스레드에서 DispatchQueue.main.sync를 사용하면 안됨

 

Reference : 

https://sujinnaljin.medium.com/ios-%EC%B0%A8%EA%B7%BC%EC%B0%A8%EA%B7%BC-%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94-gcd-grand-dispatch-queue-1-397db16d0305

 

[iOS] 차근차근 시작하는 GCD — 1

이번엔 제발 이해하고 싶다 GCD..🥂

sujinnaljin.medium.com

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
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
글 보관함