---
# System prepended metadata

title: 'Concurrency Programming / Process, Processor'
tags: [동시성, 활동학습, 프로세스, 병렬]

---

# Concurrency Programming / Process, Processor - Mary🐿️, Whales🐬, Yetti🦊, kyungmin🐼, EtialMoon🌕

###### tags: `활동학습` `동시성` `병렬` `프로세스`

## Concurrency Programming
### 1️⃣ 동시성(Concurrency) 프로그래밍, 병렬(Parallelism) 프로그래밍은 어떻게 다르며, 우리가 주로 접할 iOS 환경에서는 무엇을 더 고려해봐야 할까?
  - **동시성(Concurrency) 프로그래밍**: 하나의 CPU코어가 여러 작업을 동시에 수행
  - **병렬(Parallelism) 프로그래밍**: 여러 개의 CPU코어가 하나의 작업을 분담해서 하는 것
  - <img src = "https://hackmd.io/_uploads/S1YbU1lt3.png" width = "400">
  - 예시
동시성(Concurrecny) : 통장을 만들러 온 N개의 대기열과 한 명 이상의 은행직원
병렬성(Parallelism) : 통장을 만들러 온 N개의 대기열과 N명의 은행직원
  - <img src = "https://hackmd.io/_uploads/Hkx8mJgtn.png" width = "400">
  - iOS 환경에서는 병렬(Parallelism) 프로그래밍을 위한 하드웨어의 한계가 있기 때문에 동시성(Concurrency) 프로그래밍을 더 고려해야함

### 2️⃣ 동시성 프로그래밍, 병렬 프로그래밍, 동기(synchronous)와 비동기(asynchronous)의 개념은 어떤 상관관계를 가질까?
  - 표면적으로는 멀티코어에서 멀티스레드를 동작시키는 병렬성이 싱글코어 또는 멀티코어에서 멀티스레드를 동작시키는 동시성에 포함되는 개념처럼 보이지만
사실 동시성은 논리적인 용어로, 싱글 코어의 멀티 태스킹은 각 스레드들이 병렬적으로 실행되는 것처럼 보이지만 사실은 서로 번갈아 가면서 실행되고 있는 방식이므로 상관관계를 정의하기 어렵다고 생각합니다.

### 3️⃣ 애플이 동시성 프로그래밍 또는 병렬 프로그래밍을 지원하기 위해 사용하는 기술엔 무엇무엇이 있을까?
  - Grand Central Dispatch (GCD) : 멀티 코어와 멀티 프로세싱 환경에서 최적화된 프로그래밍을 할 수 있도록 애플이 개발한 기술
  - 연산 대기열 (Operation Queue) : 비동기적으로 실행되어야 하는 작업을 객체 지향적인 방법으로 사용합니다.
  - Thread : 멀티스레드 프로그래밍을 위한 애플에서 제공하는 스레드 클래스입니다.
  
### 4️⃣ 프로그래밍에서 Thread는 무엇이고 iOS 환경에서 이를 다루기 위한 방법에는 무엇무엇이 있으며 그 차이는 무엇일까?
  - 스레드는 하나의 프로세스 내에서 실행되는 작업흐름의 단위
    - 보통 한 프로세스는 하나의 스레드를 가지고 있지만, 프로세스 환경에 따라 둘 이상의 스레드를 동시에 실행가능 -> 멀티스레딩
    - 프로그램 실행이 시작될 때부터 동작하는 스레드 -> 메인 스레드
      그 외 나중에 생성된 스레드 -> 서브 스레드 또는 세컨더리 스레드
    - <img src = "https://hackmd.io/_uploads/SJrxcklF2.png" width = "400">

  - iOS 환경에서 이를 다루기 위한 방법
      - Swift의 동시성 모델은 스레드 위에 구축되지만 스레드와 직접 상호 작용하지는 않습니다. Swift의 비동기 함수는 실행 중인 스레드를 포기할 수 있습니다. 그러면 첫 번째 함수가 차단되는 동안 다른 비동기 함수가 해당 스레드에서 실행될 수 있습니다. 비동기 함수가 재개될 때 Swift는 해당 함수가 실행될 스레드에 대해 어떠한 보장도 하지 않습니다.
      - [Apple Document - Concurrency](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/concurrency/)

<br>

## Process, Processor

### 1️⃣ Windows 운영체제는 32bit 버전, 64bit 버전, ARM 버전 등 다양한 버전이 존재합니다. 이 버전은 어떤 것을 의미하며 왜 이렇게 다양한 버전이 존재해야 할까요?
- 각 버전이 존재하는 이유는 다양한 하드웨어 아키텍처와 용도에 따라 최적화된 운영체제를 제공하기 위함이다.

### 2️⃣ 내 매킨토시의 프로세서는 무엇인가요?
- Apple Silicon(M1, M2...)

### 3️⃣ 애플이 새로 출시한 매킨토시 컴퓨터에서 iOS의 애플리케이션을 실행할 수 있는 이유는 무엇일까요?
- Apple Silicon(M1, M2...)이 모바일 프로세서인데 20년도부터 MacOS에도 탑재가 되기 시작했고 그로 인해 매킨토시 컴퓨터에서도 iOS의 앱을 실행할 수 있다.

### 4️⃣ 이전의 매킨토시 컴퓨터에서는 불가능했던 이유는 무엇일까요?
- 아키텍처에 따라 CPU의 작동 원리가 다르다.
- 인텔은 모바일 프로세서가 아니기 때문에 불가능, M1, M2는 모바일 프로세서이기 때문에 가능하다.

### 5️⃣ 프로세서를 위한 프로세스 스케쥴링 방식에는 어떤 것이 있는지 간략히 알아봅시다.
- 프로세스 스케줄링이란? 운영체제가 실행할 프로세스들을 관리하고, 프로세서의 실행 시간을 어떻게 할당할지 결정하는 방식
- **선점(preemptive) 스케줄링**
    - 라운드 로빈(Round Robin): 프로세서를 시간 단위로 나누어 여러 프로세스들에게 균등하게 실행 시간을 할당하는 방식
    - SRT(Shortest Remaining Time First): 프로세스의 남은 실행시간이 가장 짧은 프로세스가 우선적으로 실행되는 방식(선점)
    - 다단계 큐(Multi Level Queue): 서로 다른 우선순위를 가지고 있는 큐에 프로세스 별로 자신의 우선순위에 맞는 큐에 할당되는 방식
    - 다단계 피드백 큐 (Multi Level Feedback Queue): 프로세스의 특성(입출력, 싱행 시간)에 따라 우선순위가 변경되며 큐 사이를 이동하는 방식
- **비선점(non-preemptive) 스케줄링**
    - 우선순위(Priority): 프로세스에 우선순위 값을 할당하고, 우선순위가 가장 높은 프로세스를 가장 먼저 실행하는 방식
    - 기한부(Deadline): 각 작업에게 마감 시간(deadline)을 할당하고, 이를 기반으로 작업들을 스케줄링하는 방식
    - FCFS 스케줄링 (First Come First Serve Scheduling): 도착한 순서대로 프로세스를 처리하는 방식
    - SJF(Shortest Job First): 실행 시간이 가장 짧은 프로세스를 가장 먼저 실행하는 방식(비선점)
    - HRN(Highest Response Ratio Next): 대기 시간 및 실행 시간에 따라 우선순위를 선정하여 우선순위가 가장 높은 프로세스를 가장 먼저 실행하는 방식 

### 6️⃣ 운영체제 입장에서 다양한 프로세스를 스케쥴링하는 규칙을 만들어봅시다.
- 인공 지능 기반 스케줄링 방식: 인공지능이 프로세스 별로 특성들을 파악해 어떤 우선순위로 선점방식을 채택할 것인지를 추천해주고 사용자와 함께 상호작용하면서 실시간으로 스케줄링방식을 변경할 수 있는 방식


<br>

## 보너스
### 🆙 앞으로 iOS와 macOS는 통합될까요? 

Apple은 2020년부터 iOS와 macOS를 통합하는 방향으로 나아가고 있다. 이러한 통합은 Apple이 자체 설계한 Apple Silicon 프로세서가 도입되면서 가속화되고있다. Apple Silicon은 iOS 기기에서 사용되던 ARM 아키텍처를 기반으로 한 동일한 아키텍처를 macOS 기기에도 적용했다.

이러한 통합은 몇 가지 측면에서 진행되고 있다:

1. **유사한 아키텍처**: Apple Silicon을 사용함으로써 iOS와 macOS는 동일한 아키텍처를 공유하게 되었다. 이는 애플리케이션과 개발자 도구의 호환성을 향상시키고, iOS 앱을 macOS에서 실행할 수 있는 기반을 마련했다.

3. **공유 프레임워크**: 애플은 macOS와 iOS 간에 공유되는 프레임워크를 도입하고 있다. Catalyst라고 불리는 기술은 iOS 앱을 macOS 앱으로 쉽게 변환할 수 있게 도와주는 프레임워크다. 이를 통해 개발자는 더 쉽게 애플리케이션을 다중 플랫폼에 배포할 수 있다.

3. **동일한 생태계**: 애플은 iOS와 macOS 간에 생태계를 통합하는 노력을 기울이고 있다. 예를 들어, iCloud를 통해 데이터 및 설정을 동기화하고, 애플의 다양한 서비스와 앱을 모든 기기에서 사용할 수 있게 만들고 있다.

하지만 iOS와 macOS가 완전히 통합되어 하나의 운영체제로 통합될지에 대해서는 명확한 정보가 없다. Apple은 각 플랫폼의 고유한 특성과 사용 사례를 고려하여 사용자 경험을 최적화하고 있다. 따라서 iOS와 macOS 간의 일부 차이점은 남아있을 수 있다. 그러나 애플은 두 플랫폼 간의 연동성과 호환성을 개선하여 사용자들이 맥과 아이폰 등을 효율적으로 연결하고 사용할 수 있는 노력을 계속하고 있다.