210201[ft_philosopher]프로세스와 쓰레드

Modyhoon·2021년 2월 1일
2
post-thumbnail

프로세스

프로세스 이전에 프로그램이란 무엇인지 알아보자.

프로그램은 일반적으로 보조기억장치(SSD, HDD 등)에 저장된 실행코드(binary file)이다. 
즉, 생명이 없는 프로세스라고 생각하면 된다.

프로세스는 프로그램을 구동하여 프로그램 자체와 프로그램의 상태가 메모리에 Deploy되어 실행되는 작업 단위를 말한다.

동시에 여러 프로세스를 운용하는 것을 멀티 태스킹이라고 하며, 관리는 운영체제에서 담당한다.

스레드

스레드는 프로세스 내에서 실행되는 작업 흐름의 단위이다.

스레드를 별도로 관리하지 않을 경우 한 프로세스는 하나의 main Thread를 가지고 있다.

프로세스의 환경에 따라 동시에 여러 스레드를 실행할 수 있다.
이러한 방식을 멀티 스레딩이라고 한다.

그리고, 프로그램이 시작될 때 동작하는 스레드를 메인 스레드, 나중에 생성된 스레드를 서브 스레드 또는 세컨더리 스레드 라고 한다.

CS 관점에서의 둘의 차이

내가 자주 쓰는 음악 어플인 Vibe(바이브) 를 예로 들어보자.

바이브에서 음악을 듣고 있으면서 동시에 다음에 들을 곡을 찾거나,
음량을 조절할 수 있다.

이렇듯 한 프로세스 내에서 동시에 다른 작업을 수행하기 위해 스레드를 사용한다.

하지만 이런 의문이 든다. 프로세스를 하나로 두지 말고, 각각 역할을 수행하는 여러 프로세스를 실행시키면 되는 것 아닌가?

이는 불가능에 가깝다. 메모리에 Deploy된 프로세스는 다른 프로세스가 침범할 수 없다.

따라서 프로세스보다 더 작은 단위인 Thread의 개념이 도입된 것이다.

Thread는 위와같은 문제점을 해결하기 위해서 나온 것이니 만큼 당연히 프로세스가 차지하고 있는 메모리 영역에 자유롭게 넘나들 수 있다.

면접에서 이를 물어보면 어떻게 대답할까?

면접관이 이와같은 질문을 한다면, 아마 단순히 프로세스와 스레드 간의 차이를 알고있는지 체크하는 용도는 아닐것이다.

프로세스와 스레드의 작동방식을 이해하고있는지 판단하기 위해서 이므로, 좀 더 세세하게 알아보도록 하자.

OS에서, Program이 Memory에 Deploy해서 Process가 된다고 했다. 이 때, 차지하는 메모리 영역은 총 네 가지로, Code 영역, Data 영역, Stack 영역, Heap 영역이다.

위에서 쓰레드는 같은 메모리 영역에 드나들 수 있다고 했는데, 자세히는 Stack 영역을 제외한 나머지 영역만 공유할 수 있다. (Heap, Code, Data)

각각의 쓰레드는 각기 다른 Stack 영역을 추가적으로 할당받는다. 나머지 영역은 서로 공유된다.

만약 Thread에서 오류가 발생한다면?

각기 다른 Process중 하나가 고장난다 해도 다른 Process에는 문제되지 않는다
그 이유는 Memory가 각각 독립된 영역에 할당받았기 때문이다.

반면, Thread는 서로 공유하는 영역(Code, Heap, Data)이 존재하기 때문에, 한 Thread가 문제되면 Process가 터질 우려가 있다.

참조 (https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4)

profile
어제보다 나은 오늘

0개의 댓글