컴퓨터공학 (Computer Science Engineering)을 전공한 사람들에게 프로그램과 프로세스 그리고 스레드는 매우 친숙한 개념이다. 하지만 비전공자 개발자로 시작하는 사람들에게는 다소 추상적이고 혼란스러운 개념이 될 수 있다. 이러한 이유로 설명할 때 사전적 의미 보다는 보다 직관적인 관점에서 설명하려고 노력하였다.
프로그램은 실행이 가능한 상태지만 실행하고 있는 상태는 아니다. 다시 말하자면 컴퓨터에 실행되기 위해서는 하드디스크 이외에도 메모리(RAM)자원을 더 할당받아야 한다.
프로세스는 자원을 할당받는다. 스레드는 프로세스가 할당받은 자원을 공유해서 사용한다.
위의 그림은 프로세스의 메모리 구조를 간략하게 나타낸 것이다. 리소스는 스레드 단위가 아니라 프로세스 단위로 독립적으로 할당받게 된다.
프로세스는 자원을 할당받고 스레드는 자원을 사용한다. 스레드를 unit of execution이라고 부르기도 하는데 이는 스레드가 실행의 주체이기 때문이다.
위의 그림에서 가장 주의 깊게 봐야 하는 부분은 멀티 스레드 부분이다. 힙과 데이터 그리고 코드 영역은 공유하고 스택 부분만 별도로 할당받아서 사용한다. 그렇기 때문에 프로세스에 비해서 상대적으로 문맥 전환(Context switching)에 유리하고 빠르다.
Differences Between Program Vs Process vs Threads
In-Memory Layout of a Program (Process)
봐도봐도 헷갈리는데 쉽게 이해할 수 있는 설명 감사합니다!