개념
사실 위 사진만으로도 이미 충분한 설명이 되지만,
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가 스레드 하나씩을 담당하는 것도 가능하다는 장점이 있다.
하지만, 각각의 스레드의 실행 순서를 명확하게 알 수 없다는 단점도 있다.
이러한 단점을 극복하기 위해 세마포어 등의 방법을 사용한다.
'개발' 카테고리의 다른 글
[nginx] Cross-origin 허용하기 / Access-Control-Allow-Origin 헤더 설정 (0) | 2021.08.20 |
---|---|
[Nginx / Lightsail] POST 405 not allowed 해결 방법 - Vue.js Axios PHP PDO Post (0) | 2021.06.18 |
[ESLint/Prettier] is assigned a value but never used 해결 방법 (0) | 2021.02.10 |
JSP 초기 사용법의 단점과 Servlet 등장 및 MVC (0) | 2021.01.07 |
[Ajax] readyState, status란 (0) | 2021.01.06 |