티스토리 뷰

프로그래밍을 하면서 항상 부딪히는 주제이고, 어려운 주제인... 

 

동시성 프로그래밍, 비동기 프로그래밍에 대해서 정리해보고자 합니다.

 

먼저 필요한 기본 개념들을 하나씩 짚어보고 갈게요..! 프로세서, 코어, 프로그램과 프로세스, 스레드

 

프로세서

  • 프로그램을 수행하는 하드웨어 유닛
  • 멀티 프로세서 : 한 컴퓨터가 여러 개의 프로세서를 갖는것. (듀얼 프로세서 : 2개의 프로세서)
  • ex) CPU

코어

  • 프로세서의 주요 연산회로
  • 싱글코어, 듀얼코어 : 연산회로의 갯수
  • 여러 개의 코어를 갖는 프로세서 또한 멀티 프로세서

프로그램, 프로세스

  • 프로그램 : 보조기억 장치에 저장된 실행코드, active하지 않은 상태
  • 프로세스 : 프로그램을 구동하여 프로그램 자체와 프로그램의 상태가 메모리상에서 실행되는 작업 단위, active한 상태
  • 멀티태스킹 : 동시에 여러 개의 프로세스를 운용하는 시분할 방식
  • 프로세스의 관리는 OS에서 담당

스레드

  • 하나의 프로세스 내에서 실행되는 작업흐름의 단위
  • 메인스레드 : 프로그램 실행과 동시에 동작 (나머지 추가 스레드들 : 서브스레드, 세컨더리스레드)
  • 멀티스레딩 : 프로세스에서 둘 이상의 스레드를 동시 실행하는 것

 

 

**비동기(Asynchronous) 프로그래밍

  • 프로그램의 주 실행 흐름을 멈추고 바로 다른 흐름을 실행하는 것으로 기다리는 부분 없이 바로 다음 작업을 실행할 수 있게 하는 방식
  • 코드의 실행 결과 처리를 별도의 공간에 맡겨둔 뒤 결과를 기다리지 않고 바로 다음 코드를 실행하는 병렬처리 방식

동시성(Concurrency) 프로그래밍

  • 동시에 실행되는 것처럼 보이는 것
  • 싱글코어(멀티코어도 가능)에서 멀티스레드를 동작시키기 위한 방식으로 멀티 태스킹을 위해 여러개의 스레드가 번갈아 가면서 실행되는 방식
  • 동시성을 이용한 싱글 코어의 멀티 태스킹은 각 스레드들이 병렬적으로 실행되는 것처럼 보이지만 사실은 서로 번갈아 가면서 실행되는 방식

병렬성(Parallelism) 프로그래밍

  • 물리적으로 동시에 진짜 동시에 실행되는 것
  • 멀티 코어에서 멀티 스레드를 동작시키는 방식으로 데이터 병렬성(Data Paralleism)과 작업 병렬성(Task Parallelism)으로 구분

 

 

동시성(Concurrency)프로그래밍 vs 병렬성(Parallelism) 프로그래밍

동시성 프로그래밍과 병렬성 프로그래밍 모두 비동기(Asynchronous) 동작을 구현할 수 있지만, 그 동작 원리가 다릅니다. 아래 그림처럼 비유해 볼 수 있습니다.

  • 동시성(Concurrecy) : 통장을 만들러 온 N개의 대기열과 한 명 이상의 은행직원
  • 병렬성(Parallelism) : 통장을 만들러 온 N개의 대기열과 N명의 은행직원

 

두 방식을 비교해 보자면,

 

병렬성은 작업들을 물리적으로 동시에 수행하기 때문에 하나의 작업의 응답시간을 줄일 수 있고,

 

동시성은 단일 작업의 응답시간을 줄일 수는 없지만, 한번에 여러작업을 처리해서 Throughput을 늘리는 데에 의미가 있습니다.

 

 

iOS 에서 환경 내의 동시성(Concurrency) 프로그래밍 지원 종류

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

이에 대해서 하나씩 알아보겠습니다.

 

 

 

참고 : https://www.edwith.org/boostcourse-ios/lecture/16866/

'iOS' 카테고리의 다른 글

[iOS] ScrollView 톺아보기  (0) 2019.08.22
[iOS] OperationQueue 톺아보기  (0) 2019.08.22
[iOS] Photos 프레임워크 톺아보기  (2) 2019.08.10
[iOS] Codable 톺아보기  (0) 2019.08.01
[iOS] 세궈(Segue) 톺아보기  (1) 2019.08.01
댓글
공지사항