프로세스 : 운영체제로부터 자원을 할당받은 작업의 단위.
스레드 : 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위.
프로그램을 실행하면 운영체제로부터 메모리에 공간을 할당받고, 해당 상태의 프로그램을 프로세스라고 하는 것 같다.
위키백과에서 프로세스의 정의는 다음과 같다.
프로세스(process)는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다.
종종 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰인다.
프로세스의 특징을 보면
프로세스는 여러개가 동시에 작업될 수 있다.
프로세스 간의 메모리는 서로 접근 불가능하다.
프로세스는 무조건 하나 이상의 스레드를 갖는다.(기본적으로 main 스레드 존재)
기타 등등
스레드는 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위라고 위에서 얘기했다.
프로세스가 할당받은 메모리를 보면 아래와 같다.
|stack|
|unused memory |
|heap|
|data|
|code|
code 영역과 data영역은 컴파일시에 할당되고 heap과 stack은 프로그램 수행 중 사이즈가 변한다.
스택은 위에서부터 아래로 쌓이고 힙은 아래에서부터 위로 쌓인다.
그러다 더이상 메모리 공간이 없으면 out of memory와 같은 오류가 발생한다.
스레드는 하나의 프로세스에서 여러개가 있을 수 있다. 즉, 멀티스레드 환경으로 구성할 수 있는데,
data, code, heap 영역은 공유해서 같은 메모리에 자유롭게 접근 할 수 있다.
그렇기 때문에 thread safety 문제가 발생한다. 이를 막기 위해 뮤텍스, 세마포어와 같은 방식을 사용하기도 한다.