[CS 기초] 프로세스와 스레드 차이

개발者·2022년 1월 15일
0

CS

목록 보기
1/6

프로세스 : 운영체제로부터 자원을 할당받은 작업의 단위.

스레드 : 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위.

프로그램을 실행하면 운영체제로부터 메모리에 공간을 할당받고, 해당 상태의 프로그램을 프로세스라고 하는 것 같다.

위키백과에서 프로세스의 정의는 다음과 같다.

프로세스(process)는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다.
종종 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰인다.

프로세스의 특징을 보면

  • 프로세스는 여러개가 동시에 작업될 수 있다.

  • 프로세스 간의 메모리는 서로 접근 불가능하다.

  • 프로세스는 무조건 하나 이상의 스레드를 갖는다.(기본적으로 main 스레드 존재)

  • 기타 등등

스레드는 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위라고 위에서 얘기했다.

프로세스가 할당받은 메모리를 보면 아래와 같다.

|stack|
|unused memory |
|heap|
|data|
|code|

code 영역과 data영역은 컴파일시에 할당되고 heap과 stack은 프로그램 수행 중 사이즈가 변한다.

스택은 위에서부터 아래로 쌓이고 힙은 아래에서부터 위로 쌓인다.

그러다 더이상 메모리 공간이 없으면 out of memory와 같은 오류가 발생한다.

스레드는 하나의 프로세스에서 여러개가 있을 수 있다. 즉, 멀티스레드 환경으로 구성할 수 있는데,

data, code, heap 영역은 공유해서 같은 메모리에 자유롭게 접근 할 수 있다.

그렇기 때문에 thread safety 문제가 발생한다. 이를 막기 위해 뮤텍스, 세마포어와 같은 방식을 사용하기도 한다.

profile
solrasido

0개의 댓글