개발

[신입 개발자 면접 준비] Process와 Thread / 프로세스와 스레드

Monsh 2021. 4. 7. 22:23
반응형

Program, Process, Thread from Wikipedia

개념

사실 위 사진만으로도 이미 충분한 설명이 되지만,

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가 스레드 하나씩을 담당하는 것도 가능하다는 장점이 있다.

하지만, 각각의 스레드의 실행 순서를 명확하게 알 수 없다는 단점도 있다.

이러한 단점을 극복하기 위해 세마포어 등의 방법을 사용한다.

반응형