프로세스는 메모리 상에서 실행중인 프로그램을 말하며, 스레드는 이 프로세스 안에서 실행되는 흐름 단위를 말합니다.
프로세스와 스레드는 메모리 영역 공유 여부에서 차이가 있습니다.
프로세스는 최소 하나의 스레드를 보유하고 있으며 각각 별도의 주소공간을 독립적으로 할당받습니다. 스레드는 자원 중에 stack만 따로 할당받고 나머지 영역은 스레드끼리 서로 공유합니다.
운영체제는 프로세스마다 Code/Data/Stack/Heap의 형식으로 각각 독립된 메모리 영역을 할당해주기 때문에 프로세스는 다른 프로세스의 변수나 자료에 접근할 수 없습니다.
이와 다르게, 스레드는 메모리를 서로 공유할 수 있습니다. 프로세스가 할당받은 메모리 영역 내에서 Stack 형식으로 할당된 메모리 영역은 다로 할당받고, 나머지 Code/Data/Heap 형식으로 할당된 메모리 영역을 공유합니다. 따라서, 각각의 스레드는 별도의 스택을 가지고 있지만 힙 메모리는 서로 읽고 쓸 수 있게 됩니다.