이번 포스팅은 멀티 태스킹과 멀티 프로세싱에 대해 정리 해보겠다!

예를 들어, 피파(프로그램A) 를 하면서 유튜브(프로그램 B) 를 본다고 가정하자.


단일 프로그램 실행

만약 연산을 처리할 수 있는 CPU 코어가 1개(싱글 코어)라고 한다면, 한 번에 하나의 프로그램 코드를 실행할 수 있다.

 

실행 완료

이런식으로, 하나의 코드라인씩 꺼내와서 A 프로그램을 마친 후에, B 프로그램도 A 프로그램과 같이 실행한다.

위와 같은 방법은 코어가 하나이므로 한 번에 하나의 프로그램 코드만 실행 할 수 있다.

 

이처럼 하나의 프로그램을 완전히 마친 후에 다을 프로그램의 코드를 실행 할 수 있다면 진짜 개답답해서 죽을 수 도 있을 것 같다..

이를 해결하기 위해 하나의 CPU 코어로 여러 프로그램을 동시에 실행하는 멀티 태스킹 기능 기술이 등장했다.

 


멀티 태스킹

현대 CPU는 초당 수십억번 이상의 연산을 수행할 정도로 성능이 좋다.

이러한 CPU의 성능을 최대로 발휘하기 위해 두가지 프로그램의 코드를 번갈아가면서 하나씩 수행하면, 아마 두개의 프로그램이 동시에 실행 되는 것 처럼 보이지 않을까? 마치 착시현상처럼 말이다!

아래 처럼 수행한다면, 아마 두 프로그램을 동시에 수행하는 것 처럼 보일 수도 있을 것이다.

위 그림처럼, A의 코드를 하나 실행하고 잠시 멈추고, B 프로그램의 코드 하나를 실행하고 잠시 멈추는 과정을 반복하면 아마 동시에 프로그램이 실행되는 것 처럼 보일 것이다!

이렇게 동시에 실행되는 것 처럼 하는 기법을 시분할 기법(Time Sharing) 이라고 한다.

위 방식대로 하나의 코어로 여러 프로그램이 동시에 수행하도록 하는 것을 멀티태스킹이라고 한다.


멀티 프로세싱

"만약 코어가 2개 이상이면 어떻게 되나요"

좋은 지적이다! 요새 씨피유는 앞선 예제처럼 하나의 코어만 존재하지 않고 두개 이상의 코어가 존재한다

먼저 코어의 정의를 다시 한번 리마인드 하면, CPU 안에서 실제로 연산을 처리하는 장치 라고 생각하자.

그럼 2개 코어가 존재할 때는 어떻게 실행되는지 살펴보자.

원리는 같다. 하지만 코어가 하나 더 존재함으로써, 물리적으로 낼수 있는 연산 처리 속도가 확실히 증가한다.

즉 멀티 프로세싱은 둘 이상의 프로세서(CPU 코어)를 사용하여 여러 작업을 동시에 처리하는 기술을 의미한다.


멀티 태스킹 vs 멀티 프로세싱

쉽게 설명해서,

멀티 태스킹은 하나의 코어를 통해 여러 프로그램을 동시에 처리하는 것 처럼 보이게하는 소프트웨어적 방식이고, 

멀티 프로세싱은 다중 코어를 통해 실질적으로 여러 작업을 동시에 처리하는 물리적 방식이라고 생각하면 된다.

즉 우리는 여러개의 CPU코어를 통해 멀티 프로세싱을 이용하는 동시에, 각각의 코어가 여러 작업을 동시에 수행하는 것처럼 보이게 하며 여러 작업을 처리함으로써 두가지 개념을 모두 사용하고 있다고 생각하면 된다.

 

다음 포스팅은 프로세스와 스레드에 대해 포스팅 하겠다!