티스토리 뷰
프로그래밍을 하면서 항상 부딪히는 주제이고, 어려운 주제인...
동시성 프로그래밍, 비동기 프로그래밍에 대해서 정리해보고자 합니다.
먼저 필요한 기본 개념들을 하나씩 짚어보고 갈게요..! 프로세서, 코어, 프로그램과 프로세스, 스레드
프로세서
- 프로그램을 수행하는 하드웨어 유닛
- 멀티 프로세서 : 한 컴퓨터가 여러 개의 프로세서를 갖는것. (듀얼 프로세서 : 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 : 멀티스레드 프로그래밍을 위한 애플에서 제공하는 스레드 클래스
이에 대해서 하나씩 알아보겠습니다.
'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 |
댓글
공지사항