Process VS Thread
Process
컴퓨터에서 실행 중인 프로그램을 뜻 한다.
각각의 프로세스는 독립된 메모리 공간을 할당 받고, 명령어들과 데이터를 가진다.
Process는 메인 메모리에서 CPU(명령어를 실행하는 연산 장치)에서 실행되기 위해 대기하고 있다.
Process 시스템은 가장 초창기에는 단일 프로세스 시스템으로 한 번에 하나의 프로그램만 실행되었다.
그런데 이런 단일 프로세스 시스템은 CPU 사용률이 좋지 못하다는 단점이 있다.
이런 단점을 해결하기 위해 여러 개의 프로그램을 메모리에 올려놓고 동시에 실행시자는 생각을 했다. 그리고 IO 작업이 발생할 시에 다른 프로세스가 CPU에서 실행시키기로 했다.
이런 종류의 시스템을 멀티프로그래밍이라고 한다.
멀티프로그래밍
멀티프로그래밍은 CPU 사용률을 극대화 시키는데 목적이 있지만, 큰 단점이 존재했다.
그 단점은 CPU 사용 시간이 길어지면 다른 프로세스는 계속 대기를 해야한다는 점이다.
이런 단점을 해결하기 위해 프로세스는 한번 CPU를 사용할 때 아주 짧은 시간(quantum)만 CPU에서 실행되도록 했다.
이런 종류의 시스템을 멀티태스킹이다.
멀티태스킹
멀티태스킹은 프로세스의 응답 시간을 최소화 시키는데 목적이 있다. 이 시스템 덕분에 사용자는 여러 프로그램이 동시에 실행되는 것처럼 느끼게 되었다.
하지만 멀티태스킹 시스템도 단점이 존재했다.
- 하나의 프로세스가 동시에 여러 작업을 수행하지 못함
- 프로세스의 컨텍스트 스위칭이 많이 일어남
- 프로세스끼리 데이터 공유가 까다로움(서로 다른 메모리 공간에 있기 때문에)
- 듀얼 코어가 등장했지만 잘 쓰지 못함
이런 단점을 해결하기 위해 등장한 것이 Thread이다.
Thread
Thread의 특징들은 다음과 같다.
프로세스는 반드시 한 개 이상의 스레드를 가지고 있다.
스레드 등장 전에는 프로세스가 CPU에서 실행되는 단위로 표현되었는데 스레드 등장 후로는 스레드가 CPU에서 실행되는 단위가 되었다.(unit of execution)
- 같은 프로세스의 스레드들끼리 컨텍스트 스위칭이 가볍다.
- 스레드를은 자신들이 속한 프로세스의 메모리 영역을 공유한다.(데이터 공유가 쉽다.)
CPU의 듀얼 코어가 등장하면서 하나의 코어당 하나의 스레드가 실행 가능해졌다. 즉, 코어가 2개라면 2개의 스레드가 동시에 병렬적으로 실행이 가능해졌다는 뜻이다.(하나의 프로세스로)
이런 종류의 시스템을 멀티스레딩이라고한다.
멀티스레딩
멀티스레딩은 하나의 프로세스가 동시에 여러 작업을 실행하는데 목적이 있다.
이런 멀티스레딩이 등장하면서 멀티태스킹의 개념 또한 확장되었다.
여러 프로세스와 여러 스레드가 아주 짧게 쪼개진 cpu time을 나눠 갖는 것으로 개념이 확장되었다.
이때 두 개 이상의 프로세서나 코어를 활용하는 시스템을 멀티프로세싱이라고 칭한다.
정리
만약 이러한 내용들이 이해가 안된다면 아래의 출처의 링크에 들어가 여러 예제를 통해 자세히 알아보자.
출처)
프로세스, 스레드, 멀티태스킹, 멀티스레딩, 멀티프로세싱, 멀티프로그래밍, 이 모든 것을 한 방에 깔끔하게 설명합니다!! 콘텐츠 퀄리티 만족하실 겁니다! (youtube.com)