[신입 개발자 면접 준비] Process와 Thread / 프로세스와 스레드
개념
사실 위 사진만으로도 이미 충분한 설명이 되지만,
Process와 thread를 설명하기 위해서는 우선 program의 개념부터 알아야 할 것 같다.
Wikipedia의 설명을 빌리자면,
Program: a collection of instructions that can be executed by a computer to perform a specific task
프로그램: 특정 task를 수행하기 위해 컴퓨터에서 실행되는 insructions의 집합
그렇다면 process는
Process: the instance of a computer program that is being executed by one or many threads
프로세스: 하나 이상의 스레드에 의해 실행되는 프로그램의 인스턴스
(인스턴스는 그냥 인스턴스라고 표현하는 게 나을 것 같다.)
정확하게 프로그램의 인스턴스이고, 따라서, 특정 task를 수행한다.
Thread는
Thread: the smallest sequence of programmed instructions that can be managed independently by a scheduler, which is typically a part of the operating system
스레드: OS의 스케줄러에 의해 관리 될 수 있는 프로그래밍된 instructions(복수라는 것을 기억하자)의 가장 작은 흐름
(여기서 '흐름'은 '단위'라는 단어와 동치라고 할 수 있을 것 같다.)
개념은 아래와 같이 정리할 수 있겠다.
process는 프로그램의 인스턴스이며, 스레드는 프로세스 내에 있는 가장 작은 실행 단위이다.
메모리와 관련해서
프로세스는 독립적으로 각각 메모리를 차지하고
스레드는 프로세스 내의 메모리를 공유해서 사용할 수 있다.
(추가로, 프로세스 간의 전환 속도보다 스레드 간의 전환 속도가 빠르다. 당연히 그럴 것 같다.)
멀티스레드는, CPU가 여러 개일 경우 각각의 CPU가 스레드 하나씩을 담당하는 것도 가능하다는 장점이 있다.
하지만, 각각의 스레드의 실행 순서를 명확하게 알 수 없다는 단점도 있다.
이러한 단점을 극복하기 위해 세마포어 등의 방법을 사용한다.