# Concurrency Programming > 동시성(Concurrency) 프로그래밍, 병렬(Parallelism) 프로그래밍은 어떻게 다르며, 우리가 주로 접할 iOS 환경에서는 무엇을 더 고려해봐야 할까? 동시성 프로그래밍은 다중 스레드를 활용하는 방법이다. 병렬 프로그래밍은 다중 코어를 활용하는 방법이다. 코어에 작업분배는 운영체제가 담당하기 때문에 따라서 iOS를 구현하면서 직접 병렬 프로그래밍을 구현할 일은 없을 것 같다. > 동시성 프로그래밍, 병렬 프로그래밍, 동기(synchronous)와 비동기(asynchronous)의 개념은 어떤 상관관계를 가질까? 동시성 프로그래밍은 다중 스레드를 활용하는 방법이다. 병렬 프로그래밍은 다중 코어를 활용하는 방법이다. 동기/ 비동기 : 스레드 수와는 무관. - 동기 : 현재 진행중인 작업이 끝나기를 기다림. 작업 종료시간 알 수 있음. - 비동기 : 현재 진행중인 작업이 끝나기를 기다리지 않음. 작업 종료시간 알 수 없음. > 애플이 동시성 프로그래밍 또는 병렬 프로그래밍을 지원하기 위해 사용하는 기술엔 무엇무엇이 있을까? - GCD - Dispatch queues - Dispatch source - Operation - Operation - Operation queues > 프로그래밍에서 Thread는 무엇이고 iOS 환경에서 이를 다루기 위한 방법에는 무엇무엇이 있으며 그 차이는 무엇일까? - 물리적인게 아니라 논리적인 스레드. - 스레드는 코드에 대한 별도의 실행 경로를 나타낸다. - 내부에서 작업 단위가 되는 가상의 스레드. - 하나의 스레드가 작업을 처리하는 것 보다, 여러 개의 스레드에 작업을 분산 시켜서 하는 것이 효율적일 수도 있음. - 이 친구는 물리적인 스레드의 개수와는 상관없이 많이 만들 수 있음. - 스레드를 다루기 위한 방법 - NSThread - POSIX Threads --- ## Process, Processor > Windows 운영체제는 32bit 버전, 64bit 버전, ARM 버전 등 다양한 버전이 존재합니다. 이 버전은 어떤 것을 의미하며 왜 이렇게 다양한 버전이 존재해야 할까요? - 프로세서의 스펙이 다 다르기 때문에 > 내 매킨토시의 프로세서는 무엇인가요? - M1 > 애플이 새로 출시한 매킨토시 컴퓨터에서 iOS의 애플리케이션을 실행할 수 있는 이유는 무엇일까요? - iOS의 애플리케이션은 컴파일될 때 ARM 아키텍처 기반의 명령어(RISC)로 변환이된다. - 새로 출시한 매킨토시 컴퓨터도 ARM 아키텍처로 만들어졌다. - 따라서 네이티브 성능으로 iOS 앱이 구동 가능하다. > 이전의 매킨토시 컴퓨터에서는 불가능했던 이유는 무엇일까요? - 이전의 매킨토시 컴퓨터의 프로세서는 x86 아키텍처이기 때문에 ARM 아키텍처 기반의 명령어를 해석할 수 없었다. > 프로세서를 위한 프로세스 스케쥴링 방식에는 어떤 것이 있는지 간략히 알아봅시다. - 선입 선처리 스케줄링 - 준비 큐에 삽입된 순서대로 CPU를 할당한다. - 최단 작업 우선 스케줄링 - 준비 큐에 삽입된 프로세스들 중 CPU 사용 시간의 길이가 가장 짧은 프로세스부터 CPU를 할당한다. - 라운드 로빈 스케줄링 - 정해진 시간만큼만 돌아가며 CPU를 할당한다. - 우선순위 스케줄링 - 가장 높은 우선순위를 가진 프로세스에 CPU를 할당한다. - 다단계 피드백 큐 스케줄링 - 프레서스들이 큐 사이를 이동할 수 있는 다단계 큐 스케줄링이다. > 운영체제 입장에서 다양한 프로세스를 스케쥴링하는 규칙을 만들어봅시다. ## 보너스 > 앞으로 iOS와 macOS는 통합될까요? - 아니요! 각 OS마다 사용이유가 다르고, OS를 분리하면 조금 더 최적화에 유리하니까요.