## Concurrency Programming ### 동시성(Concurrency) 프로그래밍, 병렬(Parallelism) 프로그래밍은 어떻게 다르며, 우리가 주로 접할 iOS 환경에서는 무엇을 더 고려해봐야 할까? 병렬 프로그래밍은 하드웨어와 더 관련이 있고, 동시성 프로그래밍은 소프트웨어 디자인에 더 관련이 있다. 동시성 프로그래밍은 여러 작업을 처리하기 위해 멀티 스레드를 사용하고, 병렬 프로그래밍은 하나의 작업을 여러 코어가 분담해 처리하는 프로그래밍이다. iOS환경에서는 동시성 프로그래밍을 고려해서 코드를 작성해야 한다. ### 동시성 프로그래밍, 병렬 프로그래밍, 동기(synchronous)와 비동기(asynchronous)의 개념은 어떤 상관관계를 가질까? 이 둘은 프로세스에 작업을 할당한다는 점에서 공통점을 갖고 있지만 동시성 프로그래밍은 소프트웨어적인 스레드들을 이용해서 일을 동시에 처리하는 것이고 병렬 프로그래밍은 하드웨어적인 코어들을 이용해 작업을 분담해서 처리하는 것이다. * sync: 동기적 작업 처리. 다음 작업이 있어도 현재 처리중인 작업이 끝나기를 기다린다. * async: 비동기적 작업 처리. 현재 처리중인 작업을 다른 스레드에 넘긴 후 다음 작업으로 넘어간다. 즉, 동시성을 구현하기 위해서는 비동기 작업 처리가 필요하다. 동시성 프로그래밍과 병렬 프로그래밍은 상관관계를 정의하기 어렵다. 서로 반대되는 개념이라고 볼 수 없고, 프로세스를 처리하는 상황의 차이가 있다고 볼 수 있다. ### 애플이 동시성 프로그래밍 또는 병렬 프로그래밍을 지원하기 위해 사용하는 기술엔 무엇무엇이 있을까? GCD, Dispatch Source, Operation Queues ### 프로그래밍에서 Thread는 무엇이고 iOS 환경에서 이를 다루기 위한 방법에는 무엇무엇이 있으며 그 차이는 무엇일까? Thread: 코드에 대한 별도의 실행 경로를 나타낸다. 애플리케이션 내에 개발자가 스레드를 직접 만들고 관리하는 방법과 GCD를 이용하여 스레드 관리의 일부를 시스템에게 위임하는 방법이 있다. GCD를 사용하지 않는다면 수행하려는 작업에 대한 비동기 함수가 존재하지 않을때 자체 비동기 함수를 작성하고 자체 스레드를 만들어야 했다. 하지만 GCD를 사용한다면 GCD 내부에서 스레드를 관리하기에 개발자는 작업을 정의하여 디스패치 큐에 추가하기만 하면 된다. ## Process, Processor ### Windows 운영체제는 32bit 버전, 64bit 버전, ARM 버전 등 다양한 버전이 존재합니다. 이 버전은 어떤 것을 의미하며 왜 이렇게 다양한 버전이 존재해야 할까요? CPU의 성능이 발전되고 사용 목적에 따라 아키텍처가 달라졌고, 달라진 아키텍처에 호환성을 갖는 OS가 필요했기 때문에 OS의 버전이 다양하게 만들어졌다고 생각한다. 하드웨어나 애플리케이션에서 요구하는 운영체제가 다르기 때문. 예를 들어 32bit와 64bit는 컴퓨터에서 사용되고 ARM은 스마트폰이나 태블릿에 사용이 된다. ### 내 매킨토시의 프로세서는 무엇인가요? 둘 다 M1입니다 ### 애플이 새로 출시한 매킨토시 컴퓨터에서 iOS의 애플리케이션을 실행할 수 있는 이유는 무엇일까요? iOS 애플리케이션과 새로 출시한 메킨토시 컴퓨터는 둘 다 ARM기반의 애플 실리콘을 사용하고 있기에 실행할 수 있다. ### 이전의 매킨토시 컴퓨터에서는 불가능했던 이유는 무엇일까요? 이전의 매킨토시 컴퓨터의 프로세서는 인텔 프로세서를 사용했으며 ARM 아키텍처를 기반으로 하는 iOS 애플리케이션과 호환성이 없었기 때문이다. ### 프로세서를 위한 프로세스 스케쥴링 방식에는 어떤 것이 있는지 간략히 알아봅시다. 스케줄링(scheduling)은 다중 프로그래밍을 가능하게 하는 운영 체제의 동작 기법이다. 운영 체제는 프로세스들에게 CPU 등의 자원 배정을 적절히 함으로써 시스템의 성능을 개선할 수 있다. 선점 스케줄링 방식과 비선점 스케줄링 방식 두 가지가 있습니다. * 프로세스가 실행 상태(running)에서 대기 상태(waiting)로 전환될 때 * 프로세스가 실행 상태(running)에서 준비 상태(ready)로 전환될 때 * 프로세스가 대기 상태(waiting)에서 준비 상태(ready)로 전환될 때 * 프로세스가 종료되었을 때(terminated) 첫 번째와 네 번째 상태에서만 스케줄러가 동작하는 스케줄링을 비선점 스케줄링이라고 하며 모든 상태에서 스케줄러가 동작하는 스케줄링을 선점 스케줄링이라고 한다. ### 운영체제 입장에서 다양한 프로세스를 스케쥴링하는 규칙을 만들어봅시다. * 소요 시간이 짧은 프로세스부터 CPU 할당. * 소요 시간 + 대기 시간이 가장 짧은 프로세스부터 CPU 할당. <br/> ## 보너스 앞으로 iOS와 macOS는 통합될까요? 애플이 맥북의 칩을 M1으로 바꾼 목적이 모든 기기 사용 환경의 통합을 위한 것이라고 생각하기 때문에 미래에는 통합될 가능성이 있다고 생각한다.