동시성 프로그래밍이란? Concurrency Programming이라함
동시성 프로그래밍은 멀티 스레드환경에서에서 여러 가지 작업을 동시에 처리하는 기술
Core
- Core에서 처럼 여러 가지 작업을 시분할로 나누어 번갈아 처리하는 것을 동시성 프로그래밍이라 함
스레드
- 동시성 프로그래밍이란 소프트웨어에서의 멀티 스레딩을 이용한 기술이다
- 여러 스레드를 이용하여 여러 작업을 동시에 처리하는 것
- 소프트웨어에서의 스레드는 가상으로 만들어진 스레드이기 때문에 물리적인 스레드 갯수와는 상관없이 많은 스레드를 만들 수 있음
Concurrency Programming
- 하나의 CPU가 여러 작업을 동시에 처리하는 것
- 병렬 프로그래밍과 달리 싱글 코어에서도 가능한 논리적인 개념
- 물리적으로는 하나의 작업만 처리하는 환경(코어가 1개)에서 논리적으로 여러 일을 동시에 처리
- 여러 개의 스레드를 이용하여 동시에 여러 작업을 처리함
- 예를 들어, 1명의 요리사가 동시에 파스타, 라자냐, 스테이크를 만드는 것과 같음
- 실제 여러 작업을 나열해 두고 하나씩 조금씩 번갈아가면서 작업을 처리하는 것
- 그 속도가 매우 빨라 동시에 작업을 처리하는 것처럼 보임
NOTE
직렬성(Serial) 프로그래밍
동시성 프로그래밍과 반대되는 개념임
동시성 프로그래밍은 다중 스레드를 활용하지만
직렬성 프로그래밍은 단 하나의 스레드에서만 작업
→ 동시에 작업을 처리못함, 순서대로 작업 처리
넥플릭스 다운로드 여러개 할 때 → 동시에 올라간다
Parellel Programming
- 여러 개의 CPU(코어)가 하나의 작업(TASK)을 분담해서 처리하는 것임
- 예를 들어, 3명의 쉐프가 있는 레스토랑에서 파스타 주문이 들어왔을 때, 누군가는 면을 삶고, 누군가는 파스타 소스를 만들고, 누군가는 플레이팅을 동시에 진행하는 것과 같음
- 파스타 만들기라는 하나의 작업(TASK)을 여러 개의 CPU가 분담해서 처리
- 혼자서 순서대로 처리하는 것보다 더 빠른 효율을 낼 가능성이 높음
- 물리적인 개념으로 CPU(코어)가 여러 개 있을 때에 가능함
- 싱글 코어에서는 병렬 프로그래밍을 할 수 없음
- 실제로 동시에 작업을 처리하는 것이기 때문
- iOS를 개발 하면서 직접 구현할 일은 없음
NOTE - 병렬 / 동시성 프로그래밍에 대한 오해