GCD [ Grand Central Dispatch ]
정의
- 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 = 사용자가 직접 알지 못하는 작업을 나타냄 (사용자한테 당장 인식될 필요가 없는 작업)
내용 출처
ios GCD API 동작 방식과 필요성에 대해 설명하시오.
GCD: 백그라운드에서 스레드를 관리하면서 동시적으로 작업을 실행시키는 저수준 API를 제공하는 라이브러리이다(C) 앱을 실행하면 시스템이 자동으로 메인스레드 위에서 동작하는 Main 큐(Serial Q
velog.io
[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