# 컴퓨터의 병행 처리 우리는 컴퓨터로 음악을 들으며, 웹서핑을 하고, 파일을 다운받는 작업을 동시에 할 수 있다. 이것은 컴퓨터가 병행 처리를 할 수 있기 때문이다. 병행 처리란, 여러 작업을 동시에 처리하는 것을 말한다. 컴퓨터는 병행 처리를 위해 여러가지 기술을 사용한다. ## 병렬성(Parellelism)과 동시성(Concurrency) ![image](https://hackmd.io/_uploads/BJtvLcFTa.png) | 병렬성 | 동시성 | | --- | --- | | 여러 작업을 동시에 처리하는 것을 말한다. | 여러 작업을 짧은 시간에 번갈아 가면서 처리하여 동시에 처리하는 것처럼 보이게 하는 것을 말한다. | | 실제로 여러 작업을 동시에 처리한다. | 여러 작업을 번갈아 가면서 처리하면 동시에 처리하는 것처럼 보인다. | ## 프로세싱의 발전 과정 ### 단일 프로세스 (Single Process) ![image](https://hackmd.io/_uploads/BJIAcKFp6.png) - 초창기 컴퓨터의 프로세싱은 단일 프로세스로 이루어졌다. 즉, 한 번에 하나의 작업만 처리할 수 있었다. - 다른 프로그램을 실행하기 위해서는 기존 프로그램을 종료하고, 새로운 프로그램을 실행해야 했다. - 이러한 방식은 매우 비효율적이었다. - I/O 작업이 많은 프로그램의 경우, CPU가 대기하며 다른 작업을 처리할 수 없었다. > I/O (Input/Output) 작업은 CPU가 직접 처리하지 않고, 다른 장치에게 처리를 맡기는 작업을 말한다. > > 흔히 프로그래밍에서 IO 라고 하면 대표적으로 3가지 뜻을 내포하고 있다. > > - 파일을 읽고 쓰는 것 > - 서버 네트워크의 어딘가와 데이터를 주고 받는 것 > - 마우스, 키보드와 같은 입출력 장치와 데이터를 주거나 받는 것 ### 멀티 프로그래밍 (Multi Programming) ![image](https://hackmd.io/_uploads/S1KzstFaa.png) - 멀티 프로그래밍은 여러 프로그램을 메모리에 적재하여, CPU가 대기하는 시간을 최소화하는 방식이다. - CPU가 I/O 작업을 처리하는 동안, 다른 프로그램을 실행하여 CPU 사용률을 높이는 방식이다. - 이러한 방식은 CPU 사용률을 높이고, 시스템의 응답 시간을 줄일 수 있었다. - 하지만, 여전히 CPU는 한 번에 하나의 작업만 처리할 수 있었다. ### 멀티 태스킹 (Multi Tasking) ![image](https://hackmd.io/_uploads/SkqSoYY6T.png) - 멀티 태스킹은 CPU가 여러 작업을 빠르게 전환함으로써 여러 작업이 동시에 진행되는 것처럼 보이게 하는 방식이다. - 동시성의 한 형태이다. - 이러한 방식은 여러 작업을 동시에 처리하는 것처럼 보이게 하기 위해 컨텍스트 스위칭(Context Switching) 기법을 사용한다. - 컨텍스트 스위칭 : CPU가 한 작업을 처리하다가 다른 작업으로 전환하는 것 - 멀티 태스킹은 여러 장점을 가지고 있었다. 1. 빠른 반응성 제공 - 사용자는 여러 작업이 동시에 처리되는 것처럼 보인다. 따라서 사용자는 빠른 반응성을 느낄 수 있다. 2. 멀티 프로세서의 효율적 활용 - 멀티 코어를 사용하는 시스템에서 여러 개의 프로세서(CPU)가 동시에 작업을 효율적으로 처리할 수 있다. 3. 프로세스 우선순위 부여 - 운영체제는 프로세스의 우선순위를 부여하여 중요한 작업을 먼저 처리할 수 있다. ### 멀티 프로세싱 (Multi Processing) ![image](https://hackmd.io/_uploads/BJOG3tKTT.png) - 멀티 프로세싱은 멀티 코어 CPU를 사용하여 성능을 향상시키는 방식이다. - 병렬성의 한 형태이다. - 멀티 프로세싱은 멀티 태스킹과는 다르다. - 멀티 태스킹은 하나의 CPU가 여러 작업을 동시에 처리하는 것을 말한다. - 멀티 프로세싱은 여러 개의 CPU가 여러 작업을 동시에 처리하는 것을 말한다. ### 멀티 프로세싱 + 멀티 태스킹 멀티 프로세싱과 멀티 태스킹은 서로 다른 동시 처리 방법이기 때문에 함께 사용될 수 있다. 현대의 컴퓨터 시스템에서는 멀티 코어 프로세서를 활용하여 여러 개의 프로세스(또는 스레드)를 동시에 실행한다. 이 과정에서 멀티 프로세싱과 멀티 태스킹이 결합되어 사용된다. | 멀티 태스킹 | 멀티 프로세싱 | 멀티 프로세싱 + 멀티태스킹 | | --- | --- | --- | |![image](https://hackmd.io/_uploads/ry9WpKF6T.png)|![image](https://hackmd.io/_uploads/rkef6KYpT.png)|![image](https://hackmd.io/_uploads/BJ-SaFFpa.png)| 이 두 방식의 결합으로 인해 다음과 같은 장점을 얻을 수 있다. - 시스템의 반응 시간을 단축시키고 처리량을 증가시킬 수 있다. - 프로세스 스케줄링 알고리즘을 사용하여 각 작업에 적합한 프로세서를 할당한다. - 프로세스의 우선순위를 고려하여 중요한 작업에 더 많은 CPU 시간을 할당하고, 덜 중요한 작업은 대기 상태로 둘 수 있다. - 시스템은 다양한 작업을 효율적으로 관리하며 사용자 요구에 더 빠르게 반응할 수 있다. - 최근에는 성능코어, 효율코어 등 다양한 코어를 사용하여 전력 소모를 줄이고 성능을 향상시키는 방법도 사용된다.