---
# System prepended metadata

title: 동시성 프로그래밍

---

# 동시성 프로그래밍 
## Concurrency Programming

### 동시성(Concurrency) 프로그래밍, 병렬(Parallelism) 프로그래밍은 어떻게 다르며, 우리가 주로 접할 iOS 환경에서는 무엇을 더 고려해봐야 할까?


동시성 프로그래밍: 여러 작업을 CPU가 번갈아가면서 수행하고, 전환 속도가 빠르기 때문에 사용자는 여러 작업이 동시에 실행되는 것처럼 느낄 수 있다. 
병렬 프로그래밍: 여러 일을 여러 쓰레드에서 작업하므로 실제로 다른 공간에서 동시에 작업이 실행되는 것을 말한다.
iOS에서는 `Dispatch`라는 프레임워크에서 멀티코어에 대한 동시성 코드를 작성할 수 있어서, 동시성에 대해 조금 더 고려해보면 좋을 것 같다. 


### 동시성 프로그래밍, 병렬 프로그래밍, 동기(synchronous)와 비동기(asynchronous)의 개념은 어떤 상관관계를 가질까?


sync(동기) - 한개의 작업을 완료 한 후 다음 작업이 실행되는 것(서로 같은 쓰레드에서 동작함)
async(비동기) - 여러개의 작업이 순서나 결과여부와 상관없이 동시에 실행 되는 것(서로 다른 쓰레드에서 동작함)


### 애플이 동시성 프로그래밍 또는 병렬 프로그래밍을 지원하기 위해 사용하는 기술엔 무엇무엇이 있을까?
### 프로그래밍에서 Thread는 무엇이고 iOS 환경에서 이를 다루기 위한 방법에는 무엇무엇이 있으며 그 차이는 무엇일까?

Thread는 프로그램이 동시에 여러 작업을 수행할 수 있도록 하는 프로세스 하위 작업 단위. 
하나의 프로세스는 기본적으로 하나의 일만 처리할 수 있지만, 여러개의 Thread를 생성하면 한 번에 여러 작업을 수행할 수 있다. 

Thread를 다루는 방법 
1. GCD 2. Operation Queue 
방법 두가지는 모두 멀티 스레드 환경에서 안정적으로 동작 할 수 있도록 Thread Safe한 방식으로 설계되어있다. 
GCD는 비동기 실행 큐 프레임워크로 동시에 실행할 수 있는 작업 수를 자동으로 관리해주기 때문에 큐에 작업을 추가해주면 되고 효율적인 다중 스레드 코드를 작성할 수 있다. 
Operation Queue는 GCD보다 복잡한 작업을 처리 할 수 있다. GCD가 하나의 블록으로 작업을 처리한다고 하면 Operation Queue는 Operation 객체로 캡슐화하여 작업을 추가하는데 작업간의 의존성 및 우선 순위를 지정할수도 있고 작업의 상태를 쉽게 관리 할 수 있다.




## Process, Processor

### Windows 운영체제는 32bit 버전, 64bit 버전, ARM 버전 등 다양한 버전이 존재합니다. 이 버전은 어떤 것을 의미하며 왜 이렇게 다양한 버전이 존재해야 할까요?

CPU마다 처리할 수 있는 작업의 수, 코어 개수 등등 다양한 버전이 존재하듯 이 CPU를 운영체제 내에서 읽기 위해서 CPU버전에 따라 32bit, 64bit, ARM등이 만들어졌다 생각합니다.


### 내 매킨토시의 프로세서는 무엇인가요?

레옹아범 : ARM기반의 M1칩
세홍 : ARM기반의 M2칩


### 애플이 새로 출시한 매킨토시 컴퓨터에서 iOS의 애플리케이션을 실행할 수 있는 이유는 무엇일까요?

iOS 운영체제가 동작하는 아이폰과 현재 매킨토시 컴퓨터는 같은 ARM기반의 프로세서를 장착하고 있기 때문에 매킨토시 컴퓨터에서 iOS어플리케이션을 실행할 수 있다.


### 이전의 매킨토시 컴퓨터에서는 불가능했던 이유는 무엇일까요?

이전 매킨토시는 인텔기반의 프로세서를 탑재하고 있었기 때문에 ARM기반인 iOS는 매킨토시 컴퓨터에서는 동작할 수 없었습니다.


### 프로세서를 위한 프로세스 스케쥴링 방식에는 어떤 것이 있는지 간략히 알아봅시다.

선점 스케줄링 - 한 프로세스가 cpu를 할당받아서 실행하고 있을 때 다른 프로세스가 cpu를 사용하고 있는 프로세스를 중지시키고 cpu를 차지할 수 있는 방식.
비선점 스케줄링 - 실행중인 프로세스가 직접 cpu를 해제해야 다른 프로세스가 cpu를 사용할 수 있는 방식. 


### 운영체제 입장에서 다양한 프로세스를 스케쥴링하는 규칙을 만들어봅시다.

1순위 언제 요청을 하였는가, 2순위 얼마만큼의 자원을 할당받아야하는가?, 3순위 예상실행시간이 얼마나 짧은가?
위 순위를 토대로 프로세스들에게 차례대로 할당하여 줄 것 같습니다.


## 보너스

### 앞으로 iOS와 macOS는 통합될까요?

레옹아범 : 하드웨어적으로 iOS와 macOS가 가질 수 있는 크기가 다르기 때문에 macOS에서 빠르고 쉽게 가능한것을 아이폰에서는 느린 응답속도를 보여줄 수 있으므로 통합은 안될 것 같습니다.

세홍 : Apple은 macOS에서 iOS앱을 실행할 수 있는 기능인 [Catalyst](https://developer.apple.com/mac-catalyst/)를 도입하면서 두 운영체제간의 차이를 줄이는 노력을 하고 있습니다. 언제 통합될지는 모르겠지만 통합이 가능할수 있을거라고 생각합니다. 