# 컴퓨터의 병행 처리
우리는 컴퓨터로 음악을 들으며, 웹서핑을 하고, 파일을 다운받는 작업을 동시에 할 수 있다. 이것은 컴퓨터가 병행 처리를 할 수 있기 때문이다.
병행 처리란, 여러 작업을 동시에 처리하는 것을 말한다. 컴퓨터는 병행 처리를 위해 여러가지 기술을 사용한다.
## 병렬성(Parellelism)과 동시성(Concurrency)

| 병렬성 | 동시성 |
| --- | --- |
| 여러 작업을 동시에 처리하는 것을 말한다. | 여러 작업을 짧은 시간에 번갈아 가면서 처리하여 동시에 처리하는 것처럼 보이게 하는 것을 말한다. |
| 실제로 여러 작업을 동시에 처리한다. | 여러 작업을 번갈아 가면서 처리하면 동시에 처리하는 것처럼 보인다. |
## 프로세싱의 발전 과정
### 단일 프로세스 (Single Process)

- 초창기 컴퓨터의 프로세싱은 단일 프로세스로 이루어졌다. 즉, 한 번에 하나의 작업만 처리할 수 있었다.
- 다른 프로그램을 실행하기 위해서는 기존 프로그램을 종료하고, 새로운 프로그램을 실행해야 했다.
- 이러한 방식은 매우 비효율적이었다.
- I/O 작업이 많은 프로그램의 경우, CPU가 대기하며 다른 작업을 처리할 수 없었다.
> I/O (Input/Output) 작업은 CPU가 직접 처리하지 않고, 다른 장치에게 처리를 맡기는 작업을 말한다.
>
> 흔히 프로그래밍에서 IO 라고 하면 대표적으로 3가지 뜻을 내포하고 있다.
>
> - 파일을 읽고 쓰는 것
> - 서버 네트워크의 어딘가와 데이터를 주고 받는 것
> - 마우스, 키보드와 같은 입출력 장치와 데이터를 주거나 받는 것
### 멀티 프로그래밍 (Multi Programming)

- 멀티 프로그래밍은 여러 프로그램을 메모리에 적재하여, CPU가 대기하는 시간을 최소화하는 방식이다.
- CPU가 I/O 작업을 처리하는 동안, 다른 프로그램을 실행하여 CPU 사용률을 높이는 방식이다.
- 이러한 방식은 CPU 사용률을 높이고, 시스템의 응답 시간을 줄일 수 있었다.
- 하지만, 여전히 CPU는 한 번에 하나의 작업만 처리할 수 있었다.
### 멀티 태스킹 (Multi Tasking)

- 멀티 태스킹은 CPU가 여러 작업을 빠르게 전환함으로써 여러 작업이 동시에 진행되는 것처럼 보이게 하는 방식이다.
- 동시성의 한 형태이다.
- 이러한 방식은 여러 작업을 동시에 처리하는 것처럼 보이게 하기 위해 컨텍스트 스위칭(Context Switching) 기법을 사용한다.
- 컨텍스트 스위칭 : CPU가 한 작업을 처리하다가 다른 작업으로 전환하는 것
- 멀티 태스킹은 여러 장점을 가지고 있었다.
1. 빠른 반응성 제공
- 사용자는 여러 작업이 동시에 처리되는 것처럼 보인다. 따라서 사용자는 빠른 반응성을 느낄 수 있다.
2. 멀티 프로세서의 효율적 활용
- 멀티 코어를 사용하는 시스템에서 여러 개의 프로세서(CPU)가 동시에 작업을 효율적으로 처리할 수 있다.
3. 프로세스 우선순위 부여
- 운영체제는 프로세스의 우선순위를 부여하여 중요한 작업을 먼저 처리할 수 있다.
### 멀티 프로세싱 (Multi Processing)

- 멀티 프로세싱은 멀티 코어 CPU를 사용하여 성능을 향상시키는 방식이다.
- 병렬성의 한 형태이다.
- 멀티 프로세싱은 멀티 태스킹과는 다르다.
- 멀티 태스킹은 하나의 CPU가 여러 작업을 동시에 처리하는 것을 말한다.
- 멀티 프로세싱은 여러 개의 CPU가 여러 작업을 동시에 처리하는 것을 말한다.
### 멀티 프로세싱 + 멀티 태스킹
멀티 프로세싱과 멀티 태스킹은 서로 다른 동시 처리 방법이기 때문에 함께 사용될 수 있다.
현대의 컴퓨터 시스템에서는 멀티 코어 프로세서를 활용하여 여러 개의 프로세스(또는 스레드)를 동시에 실행한다. 이 과정에서 멀티 프로세싱과 멀티 태스킹이 결합되어 사용된다.
| 멀티 태스킹 | 멀티 프로세싱 | 멀티 프로세싱 + 멀티태스킹 |
| --- | --- | --- |
||||
이 두 방식의 결합으로 인해 다음과 같은 장점을 얻을 수 있다.
- 시스템의 반응 시간을 단축시키고 처리량을 증가시킬 수 있다.
- 프로세스 스케줄링 알고리즘을 사용하여 각 작업에 적합한 프로세서를 할당한다.
- 프로세스의 우선순위를 고려하여 중요한 작업에 더 많은 CPU 시간을 할당하고, 덜 중요한 작업은 대기 상태로 둘 수 있다.
- 시스템은 다양한 작업을 효율적으로 관리하며 사용자 요구에 더 빠르게 반응할 수 있다.
- 최근에는 성능코어, 효율코어 등 다양한 코어를 사용하여 전력 소모를 줄이고 성능을 향상시키는 방법도 사용된다.