비동기(Asynchronous) 프로그래밍
: 프로그램의 주 실행 흐름을 멈추어서 기다리는 부분 없이 바로 다음 작업을 실행할 수 있게 하는 방식.
코드의 실행 결과 처리를 별도의 공간에 맡겨둔 뒤 결과를 기다리지 않고 바로 다음 코드를 실행하는 병렬 처리 방식을 의미한다.
동시성(Concurrency) 프로그래밍
: 동시에 실행되는 것처럼 보이는 것.
싱글 코어(멀티 코어에서도 가능)에서 멀티 스레드를 동작시키기 위한 방식.
여러 개의 스레드를 번갈아 가면서 실행되는 방식.
병렬성(Parallelism) 프로그래밍
: 물리적으로 동시에 정확히 실행되는 것.
멀티 코어에서 멀티 스레드를 동작시키는 방식. 데이터 병렬성과 작업 병렬성으로 구분.
- 데이터 병렬성 : 전체 데이터를 나누어 서브 데이터로 나눈 뒤, 서브 데이터들을 병렬 처리해서 작업을 빠르게 수행하는 방법.
- 작업 병렬성 : 서로 다른 작업을 병렬 처리하는 것을 말함.
동시성 프로그래밍과 병렬성 프로그래밍의 차이
동시성 프로그래밍과 병렬성 프로그래밍 모두 비동기 동작을 구현할 수 있지만 그 동작 원리가 다르다.
- 동시성 : 싱글 코어, 멀티 코어에서 모두 구현 가능.
ex. 하나의 커피머신에 커피를 받기 위한 N개의 대기열 -> 서로 번갈아 가며 커피를 받아감.
- 병렬성 : 멀티 코어에서만 구현 가능.
ex. N대의 커피머신에 커피를 받기 위한 N개의 대기열 -> 각 커피머신마다 하나의 줄을 가지고 있어 각각의 줄마다 커피를 받아감.
iOS 환경 동시성 프로그래밍 지원 종류
- GCD(Grand Central Dispatch) : 멀티 코어와 멀티 프로세싱 환경에서 최적화된 프로그래밍을 할 수 있도록 애플이 개발한 기술.
- 연산 대기열(Operation Queue) : 비동기적으로 실행되어야 하는 작업을 객체 지향적인 방법으로 사용
- Thread : 멀티스레드 프로그래밍을 위한 애플에서 제공하는 스레드 클래스