CPU에서 실행되는 단위. 프로세스는 하나 이상의 스레드를 갖고, 오늘날의 프로세스는 최소 하나를 갖는다. 실제로 CPU에서 도는 것은 프로세스가 아니라 스레드다.

공유하는 것과 따로 갖는 것

같은 프로세스에 속한 스레드들은 그 프로세스의 메모리 영역을 공유한다. 힙은 함께 쓰고, 각자의 스택과 그 스택을 가리키는 스택 포인터, 그리고 PC는 따로 갖는다. PC(Program Counter)는 다음에 실행할 명령어의 주소를 가리키는데, 실행 위치가 스레드마다 다르니 공유될 수 없다.

공유가 주는 이득과 대가

힙을 공유하는 덕분에 데이터를 주고받는 데 IPC 같은 별도 수단이 필요 없고, 전환 비용도 프로세스보다 작다. 대가도 같은 자리에서 나온다. 같은 데이터를 여럿이 건드릴 수 있으니 동기화가 필요해진다.

싱글 코어와 멀티 코어

싱글 코어에서는 스레드들이 잘게 쪼갠 시간을 나눠 쓰므로 동시에 도는 것처럼 보일 뿐이다. 멀티 코어에서는 스레드가 실제로 병렬로 실행된다.

멀티태스킹, 멀티스레딩, 멀티프로세싱

멀티태스킹은 여러 프로세스가 쪼갠 CPU 시간을 나눠 쓰는 것이다. 멀티스레딩은 하나의 프로세스가 동시에 여러 작업을 하는 것으로, 멀티태스킹을 확장한 개념이다. 멀티프로세싱은 두 개 이상의 프로세스나 코어를 활용하는 것을 말한다.

셋은 따로 논다. 싱글 코어에 스레드 두 개짜리 프로세스 하나가 돌면 코어 하나를 두고 경합하니 멀티태스킹이고, 스레드가 둘이니 멀티스레딩이지만, CPU가 하나뿐이라 멀티프로세싱은 아니다. 반대로 듀얼 코어에 싱글 스레드 프로세스가 둘이면 각자 코어를 차지해 경합이 없으므로 멀티태스킹도 멀티스레딩도 아니고 멀티프로세싱만 해당한다.

관련

출처