iOS/iOS

GCD [ Grand Central Dispatch ]

황민우 2022. 3. 24. 20:59

정의

- Background에서 스레드를 관리하면서 동시적으로 작업을 실행시켜주는 저수준 API를 제공하는 라이브러리

- 애플에서 제공하는 API로, 멀티스레딩 처리를 쉽고 편하게 해 줍니다.

- 앱을 실행하면 시스템이 자동으로 메인 스레드 위에서 동작하는 Main Queue를 만들어서 작업을 수행

 

관련 용어

스레드(Thread)

- 코드에 대한 별도의 실행 경로

 

프로세스(Process)

- 실행 중인 실행 파일

- 하나의 프로세스는 다중 스레드를 가질 수 있습니다.


GCD 동작 방식

- 수행해야 할 일(코드)을 Operation으로 Wrapping 한 다음에, Queue에 넣습니다.

- 이후에 Queue에서 남는 스레드에 작업을 배분하는 형식으로 동작합니다.


- 작업을 main thread, global thread에서 할지와 동기, 비동기 중 처리방식을 결정하여 DispatchQueue에 보냅니다.

- 보내진 작업은 시스템에 의해 각 thread로 보내져서 작업을 진행합니다.

 

GCD 필요성

- 기존에 thread를 사용하려면 개발자가 직접 thread를 생성하고 관리해야 했습니다, 하지만 GCD를 사용하면 thread 생성, 유지, 삭제, 등,, 을 개발자가 신경 쓸 필요 없이 해야 할 작업을 Queue에 예약하기만 하면 됩니다.

- 비동기식 처리로 해결할 수 없는 작업은 비용이나 시간적인 측면에서 한계가 있기 때문에, 메인 스레드에서 작업을 진행하면서 사용자가 다른 작업을 할 수 있도록 해야 하는 필요성이 있습니다.


큐(Queue)

  • Dispatch Queues = FIFO(선입선출) 순서로 작업을 실행시키는 큐
  • Serial Dispatch Queue = 한 번에 하나의 작업만 실행시키는 큐
  • Concurrent Dispatch Queue = 시작한 작업이 끝나는 것을 기다리지 않고 가능한 많은 작업을 실행시키는 큐
  • Main Dispatch Queue = 앱의 메인 스레드에서, 작업을 실행할 수 있는 전역에서 사용한 시리얼 큐

 

Dispatch Queue

- GCD에는 Dispatch Queue가 있습니다.

- Dispatch Queue는 앱의 메인 스레드 또는 백그라운드 스레드에서 작업 실행을 순차적 또는 동시적으로 관리하는 개체입니다.

- 순차적으로 작업을 진행하는 Serial Dispatch Queue와 동시적으로 작업을 진행하는 Concurrent Dispatch Queue가 있습니다. 

 

Dispatch Queue.main

- main thread queue [ 시스템 작동 시 자동으로 생성 ]

- 기본적으로 Serial Queue(직렬 큐)로 동작

- 순차적으로 작업 진행

 

Dispatch Queue.global

- background thread queue [ 백그라운드에서 동작하는 큐 ]

- 기본적으로 Concurrent Queue(병렬 큐)로 동작

- 데이터나 네트워크 통신, 등 끝나는 시간을 정확히 알 수 없을 때 메인 큐에서 동작하는 작업들에 영향을 끼치지 않기 위해 사용

- 끝나는 시간을 정확히 알 수 없어서 QoS를 통해 우선순위를 지정해 사용함

  • User-interactive = 즉시 완료해야 하는 작업을 나타냄 (높은 중요도)
  • User-initiated = 사용자 상호 작용을 계속하는데 필요한 작업을 대기 중일 때 사용 (두 번째로 높은 중요도)
  • User-default = 우선순위를 신경 쓰지 않는 작업을 나타냄 (중요한 정도가 상관없음)
  • Utility = 사용자에게 표시되는 진행률 표시가 있는 장기 실행 작업을 나타냄 (시간이 오래 걸리는 작업)
  • Background = 사용자가 직접 알지 못하는 작업을 나타냄 (사용자한테 당장 인식될 필요가 없는 작업)

내용 출처

https://velog.io/@kimjk3381/ios-GCD-API-%EB%8F%99%EC%9E%91-%EB%B0%A9%EC%8B%9D%EA%B3%BC-%ED%95%84%EC%9A%94%EC%84%B1%EC%97%90-%EB%8C%80%ED%95%B4-%EC%84%A4%EB%AA%85%ED%95%98%EC%8B%9C%EC%98%A4

 

ios GCD API 동작 방식과 필요성에 대해 설명하시오.

GCD: 백그라운드에서 스레드를 관리하면서 동시적으로 작업을 실행시키는 저수준 API를 제공하는 라이브러리이다(C) 앱을 실행하면 시스템이 자동으로 메인스레드 위에서 동작하는 Main 큐(Serial Q

velog.io

https://fomaios.tistory.com/entry/iOS-%EB%A9%B4%EC%A0%91%EC%A7%88%EB%AC%B8-GCD%EB%9E%80-%EA%B0%9C%EB%85%90

 

[iOS 면접질문] GCD란? - 개념

안녕하세요 Foma 입니다! 오늘 알아볼 주제는 GCD(Grand Central Dispatch)입니다. 바로 시작하겠습니다. Multi Threading 먼저 GCD 를 알기 위해선 멀티쓰레딩 이라는 개념을 알고있어야합니다. 왜냐하면 GCD

fomaios.tistory.com

https://github.com/jwonyLee/TIL/blob/master/iOS/Interview/GCD-API.md

 

GitHub - jwonyLee/TIL: Today I Learned

Today I Learned. Contribute to jwonyLee/TIL development by creating an account on GitHub.

github.com