본문 바로가기

TIL

프로세스와 스레드(thread)의 차이, 그리고 멀티 스레드란?

기술면접, 그리고 업무상 필요로 CS지식을 공부하는 경우가 꽤 있을 것이다.

그 중 아마 자주 들었던 단어는 프로세스,

그리고 좀 더 깊게 파고들면 스레드,

특히 스레드는 이것은 싱글 스레드이고, 이건 멀티 스레이드이다. 이런 식으로 들어봤을 것이라 생각한다.

 

하지만, 얼핏 들었던 정도로는 이게 정확히 무엇인지, 어떤 개념이고 용도인지

잘 모르는 경우가 많은 것이라 생각한다. 나 또한 그랬으니까...

 

 

프로세스(Process)

컴퓨터의 바탕화면에 들어가셔보라,

그럼 아이콘으로 되어있는 수 많은 .exe 가 보일 것이다.

이를 우리는 프로그램이라고 한다.

 

물론 정확히는 아직 실행이 안된,

그러니까 정적(static) 상태의 프로그램이라고 할 수 있다.

정적 상태의 프로그램은 컴퓨터의 저장공간, 그러니까 ssd 혹은 hdd에 저장되어 있다.

 

그렇다면.. 여기에서 실행버튼을 눌르면 어떻게 될까?

 

프로그램을 실행이 되는 것은 당연지사이고, 저장공간을 기반으로 하여,

RAM과 같은 메모리 공간, 그리고 CPU에서 연산을 위해 공간이 할당되어 인스턴스가 생성된다.

그리고 이 인스턴스를 프로세스라고 한다.

 

 

윈도우 운영체계라면 한번 작업관리자에 들어가 보시라.

아마, 여러분 컴퓨터해서 실행 중인 프로그램들이 있을 것이고,

이들의 프로세스가 나타나 있는 것을 볼 수 있다.

저의 경우, 구글 크롬 브라우저, 슬랙 앱, 스팀, 그리고 작업관리자 프로레스가 실행되고 있다.

 

이를 그림으로 도식도화 하면 이해가 더 쉬울 것이다.

 

RAM의 메모리 각 공간이 프로그램이 실행이 되면 프로레스라 하여 공간을 차지하고 있다고 생각하면 된다.

(CPU에도 할당이 되는데, 이는 복잡하니 넘어가고자 한다.)

 

 

 

스레드(Thread)

그럼 스레드는 뭘까?

스레드는 프로세스를 구성하는 하나 실행하는 기본 단위이다.

말로는 이해가 쉽지 않으니, 도식도를 한번 살펴보자.

 

위의 그림을 보자.

좌측은 싱글 스레드, 그리고 우측은 멀티 스레드로 구성된 하나의 프로세스를 나타내고 있다.

그러니까, 프로세스 하나에는 최소 한 개의 스레드가 존재하며, 여러 개가 있을 수 있다.

당연, 스레드가 여러 개가 있으면 (일반적으로) 동시에 처리할 수 있으므로 작업속도가 빨라진다.

 

그럼 스레드는 어떤 것들로 구성되어 있을까?

여기서 부터는 나도 잘 모르니 대략 설명을 드리자면, 스레드(thread)의 구성 목록은:

 

 

thread ID : 각 스레드를 고유하게 식별할 수 있는 "식별자"이다.

program counter : 현재 스레드에서 실행 중인 작업(명령어)의 주소를 저장한다.

register set : 계산 결과 혹은 변수 값을 저장한다.

stack : 각 스레드 마다 가지고 있는 것, 함수나 로컬 변수를 저장한다. (콜 스택이라고 들어보셨나?)

 

 

과 같이 있겠다.

 

그럼, 이러한 프로세스와 그 속의 스레드를 생성하고 CPU나 RAM에 할당은 어떻게 하고, 

그 주체가 무엇인가? 라고 질문이 생길 수 있다. 

이는 운영체체, 그러니까 우리가 흔히 쓰는 윈도우나 MacOS 등의 몫이다.

이들이 적절하게 공간을 분배하여 실행을 시키는 역할을 한다.

 

 

 

 

글을 작성하는데 도움이 된 영상입니다.

출처: https://youtu.be/LOfGJcVnvAk?si=0YAhXmgVx_3Wsced