본문 바로가기
개발/iOS

[iOS] GCD에 대해 알아보자

by 마자용 2022. 2. 4.
아래와 이어지는 게시글입니다
비동기 프로그래밍 방식에 대해 알아보자
아래 글들을 참고했습니다
Grand Central Dispatch / Dispatch / Concurrency Programming Guide /
차근차근 시작하는 GCD 1~4

 

들어가며

처음에는 Operation Queue부터 쓰려고 했는데,
공부하다보니 GCD를 먼저 적고 합쳐서 올리는 게 나을 것 같아서 방향을 바꾸었습니다 !


Review

우선 동시성 프로그래밍을 복습해 보겠습니다...

동시성 프로그래밍이란?

"메인 스레드에 몰려 있는 작업들을 다른 스레드에서도 동시에 작업하도록 하는 것"
즉 메인 스레드가 처리해야 할 것들을 다른 스레드에 나눠 주어, 적절하게 일을 분배시켜 동작하도록 하는 것을 말합니다.

여기서 작업을 보내는 곳을 Queue라고 합니다.
큐에 작업을 넣으면 → 운영체제(OS)가 알아서 다른 스레드로 분산 처리해 줍니다.
(OS는 컴퓨터 내의 자원들을 관리하는 역할을 맡고 있으니까요!)

이제 GCD로 넘어가보도록 하겠습니다...


GCD

Grand Central Dispatch

 

이름부터 어렵네요...

1. GCD란 무엇인가?

- 멀티 코어와 멀티 프로세싱 환경에서 최적화된 프로그래밍을 할 수 있도록 애플이 개발한 기술을 말합니다.
- 스레드들의 관리를 OS가 직접 해주기 때문에, 프로그래머가 task를 손쉽게 비동기적인 방법으로 다룰 수 있도록 해줍니다.
- GCD에서 사용하는 Queue를 Dispatch Queue라고 합니다.
- Dispatch Queue에 작업을 추가하면
→ GCD는 작업에 맞는 스레드를 자동으로 생성 & 실행시키고 끝나면 스레드를 제거합니다.

정리해보겠습니다.

  1. 프로그래머가 task를 생성하고, Dispatch Queue에 추가
  2. GCD는 작업에 맞게 스레드를 자동으로 생성, 실행 → 작업이 종료된 후 해당 스레드를 제거


이해가 되셨나요?
이 게시글도 좋으니 혹여 어려우신 경우 참고하시면 되겠습니다 ...

2. 다시 Dispatch Queue로 돌아가겠습니다!


- Dispatch Queue는 큐이기 때문에, 선입선출(First In, First Out)이라는 특징을 가집니다.
- 종류에는 Serial Dispatch Queue, Concurrent Dispatch Queue가 있습니다.

  • 이름에 걸맞게 Serial은 연속적으로(앞의 작업이 끝날 때까지 기다림) 실행되고,
  • Concurrent는 동시에(안 기다림) 실행됩니다. (이전 게시글의 Concurrency Programming 방식이 떠오르네요 ...)

 

Operation Queue는 Concurrent Dispatch Queue와 비슷합니다 !

하지만 그 외의 요인들도 고려하기 때문에 조금 더 복잡한 개념으로 보면 될 것 같습니다.

  • 그 외의 요인들: 동시에 가능한 연산의 최대수 지정 / 연산 일시적으로 중지, 취소 / KVO(key-value-observing) 등

 


 

댓글