프로세스 내부의 CPU 실행 단위를 의미.
Process : 실행중에 있는 프로그램(Program)을 의미한다.
Thread : 프로세스 내에서 실행되는 독립적인 실행 단위를 의미
즉 Thread는 Process에 포함되는 단위이며 하나의 Process당 기본적으로 Main thread가 하나씩은 존재함.
보시는 바와 같이 기본적으로 Thread는 Code section과 data section, heap section을 공유합니다. 그와 반대로 register, PC(Program counter), stack section은 각각의 thread가 개별적으로 가지고 있습니다.
이에 따라 여러 thread가 공통으로 공유하고 싶은 data가 있으면 heap section(malloc로 할당한 변수), data section(static 변수)의 변수들을 통해 하나의 공유 data에 접근할 수 있는 것이죠.
이와 반대로 공유하고 싶지 않은 변수는 stack section(지역 변수)에 지정한 변수를 활용하면 되겠군요.
Responsiveness(응답성)
하나의 Thread가 Block되어도 다른 Thread는 하던 일을 수행할 수 있음.
Resource Sharing(자원 공유)
Process들간 Shared memory 또는 Message passing과 같이 Process들끼리의 Data 공유 방식과는 다르게 Thread간의 자원 공유는 좀 더 쉽다고 볼 수 있다. (data section, heap section을 이용한 data 공유)
Economy(경제성)
Thread 생성이 Process 생성보다 더 싸다.
(Thread는 Process에 포함되어 있으니 어찌보면 당연...)
더불어 context switch보다 thread switching의 overhead가 덜 함.