동시성(Concurrency) 프로그래밍이란
많은 수의 코어를 효율적으로 활동하는데 도움을 준다.
동일한 시간에 코어를 하나 이상 사용해서 처리를 빠르게 하고, 중요하지 않은 작업은 중요도가 낮은 스레드에서 실행시킨다.
GCD(Grand Central Dispatch)
- 멀티코어와 멀티 프로세싱 환경에서 최적화된 프로그래밍을 할 수 있도록 지원해주는 동시성 프로그래밍 API
Dispatch Queue
- 태스크들을 넣어서 관리하는 클래스
- CPU 사용량이 많은 태스크들을 별도의 스레드에서 처리한 뒤 메인 스레드로 결과를 전달
Dispatch queue의 유형
- Serial Dispatch Queue
순차처리 방식
한 번에 하나의 태스크를 순차적으로 실행
- Concurrent Dispatch Queue
병렬처리 방식
순차적으로 진행하지 않고, 가능한 많은 작업을 한 번에 진행
GCD 단점
- 복잡한 Concurrency는 GCD로 표현하기 어렵다.
- 사용자의 실수로부터 사용자를 보호하기 어렵다.
- race condition, thread explosion등이 일어날 수 있다.
Swift Concurrency
WWDC 2021에 소개된 swift로 만든 새로운 동시성 프로그래밍 API
async
와 await
을 사용해서 비동기 태스크 종료 후 코드를 작성할 수 있어 callback hell을 없애고 가독성이 좋은 코드를 짤 수 있음
async
함수가 asynchronous하다는 것을 나타내기 위해 사용
await
possible suspension point를 나타내기 위해 사용
swift concurrency를 사용함으로써 얻는 이점
- 가독성
- 에러 핸들링 안정성
- 동기화 처리
- context switching 횟수 저하
- 우선순위 역전 방지