본문 바로가기

Programming

동시성과 병렬성의 차이

비동기(Asynchronous) 프로그래밍

 : 프로그램의 주 실행 흐름을 멈추어서 기다리는 부분 없이 바로 다음 작업을 실행할 수 있게 하는 방식.

   코드의 실행 결과 처리를 별도의 공간에 맡겨둔 뒤 결과를 기다리지 않고 바로 다음 코드를 실행하는 병렬 처리 방식을 의미한다.

동시성(Concurrency) 프로그래밍 

   : 동시에 실행되는 것처럼 보이는 것.

     싱글 코어(멀티 코어에서도 가능)에서 멀티 스레드를 동작시키기 위한 방식. 

     여러 개의 스레드를 번갈아 가면서 실행되는 방식.

 

병렬성(Parallelism) 프로그래밍 

   : 물리적으로 동시에 정확히 실행되는 것.

     멀티 코어에서 멀티 스레드를 동작시키는 방식. 데이터 병렬성과 작업 병렬성으로 구분.

      - 데이터 병렬성 : 전체 데이터를 나누어 서브 데이터로 나눈 뒤, 서브 데이터들을 병렬 처리해서 작업을 빠르게 수행하는 방법.

      - 작업 병렬성 : 서로 다른 작업을 병렬 처리하는 것을 말함.

 

동시성 프로그래밍과 병렬성 프로그래밍의 차이

동시성 프로그래밍과 병렬성 프로그래밍 모두 비동기 동작을 구현할 수 있지만 그 동작 원리가 다르다.

- 동시성 : 싱글 코어, 멀티 코어에서 모두 구현 가능.

   ex. 하나의 커피머신에 커피를 받기 위한 N개의 대기열 -> 서로 번갈아 가며 커피를 받아감. 

- 병렬성 : 멀티 코어에서만 구현 가능.

   ex. N대의 커피머신에 커피를 받기 위한 N개의 대기열 -> 각 커피머신마다 하나의 줄을 가지고 있어 각각의 줄마다 커피를 받아감.

 

 

(출처:  https://www.raywenderlich.com/60749/grand-central-dispatch-in-depth-part-1 )

 

iOS 환경 동시성 프로그래밍 지원 종류

  • GCD(Grand Central Dispatch) : 멀티 코어와 멀티 프로세싱 환경에서 최적화된 프로그래밍을 할 수 있도록 애플이 개발한 기술.
  • 연산 대기열(Operation Queue) : 비동기적으로 실행되어야 하는 작업을 객체 지향적인 방법으로 사용
  • Thread : 멀티스레드 프로그래밍을 위한 애플에서 제공하는 스레드 클래스