concurrency는 여러 작업들이 동시에 일어나는 것을 이야기한다. asynchronous function은 concurrency를 구현하기 위한 방법 중 하나이다. 오래 걸리는 작업들을 함수에 넣어두고, 함수를 호출하면 함수의 동작은 다른 스레드에서 진행시킨다. 그리고 함수 밖에서는 함수의 동작과 상관없이 그 이후의 작업들을 계속해서 진행한다.

이전까지는 이러한 asynchronous function과 그 내부에서 이용할 스레드를 응용프로그래머가 직접 생성해서 관리해줘야했다. 당연히 귀찮고, 복잡하고 위험하다.

그래서 Apple은 GCD를 만들어줬다. → 응용 프로그래머가 원하는 task를 dispatch queue에 넣기만 하면, GCD는 thread를 생성하고, task를 thread에 적절하게 할당해주는 것까지 담당해준다.

<aside> 💡 여기에서 task는 단순히 하고 싶은 작업(work)으로 생각하면 된다.

</aside>

GCD와 굉장히 비슷한 operations도 존재한다. operation은 GCD에 의존성 추가 / 작동하고 있는 것 취소 등의 추가적인 기능을 가지고 있다. 해당 포스트에서는 크게 다루지는 못할 것 같다.

Dispatch Queues

GCD에 다시 한 번 간단하게 정리를 좀 해보자면,

어떻게 이용할 지에 대해 알아보기 전에, dispatch queue는 무엇일까? dispatch queue는 c를 기반으로 만들어진 FIFO queue이다. dispatch queue는 serial 또는 concurrent 타입을 갖게 된다.

  1. serial queue

serial queue는 한 번에 하나의 작업을 진행한다. 하나의 thread만을 가지기 때문에 queue에 삽입된 순서대로 시작하고, 끝나는 것을 보장해준다. serial queue는 개수와 상관 없이 여러개를 생성할 수 있다.

기억할 점은,