CPU 이용의 기본 단위
스레드 ID, 프로그램 카운터(PC), 레지스터 집합, 스택으로 구성
같은 프로세스에 속한 다른 스레드와 코드, 데이터 섹션, 그리고 열린 파일이나 신호와 같은 운영체제 자원들을 공유
만약 웹 서버가 전통적인 단일 스레드 프로세스로 작동한다면, 자신의 단일 프로세스로 한 번에 하나의 클라이언트만 서비스할 수 있게 되어 클라이언트는 자신의 요구가 서비스되기까지 매우 긴 시간을 기다려야 합니다.
하나의 해결책은 서버가 요청을 받아들이는 하나의 프로세스로 동작하게 하는 것입니다. 즉, 서버에게 서비스 요청이 들어오면, 프로세스는 그 요청을 수행할 별도의 프로세스를 생성하는 것입니다.
하지만 프로세스 생성 작업은 매우 많은 시간을 소비하고 많은 자원을 필요로 하는 일입니다. 그래서 프로세스 안에 여러 스레드를 만들어 나가는 것이 더 효율적입니다.
예시로 운영체제 커널도 다중 스레드입니다. 리눅스 시스템에서 각 스레드는 장치관리, 메모리 관리 또는 인터럽트 처리 같은 자겁을 수행할 수 있습니다.
단일 cpu -> 다중 cpu로 발전
단일 컴퓨팅 코어가 있는 시스템에서는 단지 처리 코어가 한 번에 하나의 스레드만 실행할 수 있기 때문에 병행성(Concurrent)은 시간이 지남에 따라 스레드 실행이 인터리브 됨을 의미합니다.
그러나 여러 코어가 있는 시스템에서 병행성은 시스템이 각 코어에 별도의 스레드를 할당할 수 있기 때문에 일부 스레드가 병렬(Parallel) 로 실행될 수 있음을 의미합니다.