스레드는 프로세스를 구성하는 실행 흐름의 단위이다. 하나의 프로세스는 하나 이상의 스레드를 가질 수 있다.
예를 들어, 웹 브라우저 프로세스는 화면 출력 스레드, 입력 스레드, 검색 스레드 등 여러 스레드를 동시에 실행할 수 있다.
스레드 ID, 프로그램 카운터를 비롯한 레지스터 값, 스택 등 실행에 필요한 최소한의 정보를 가지고 있다.
하지만 프로세스를 이루는 스레드들은, 프로세스의 자원을 공유한다.
동일한 작업을 수행하는 단일 스레드 프로세스 여러개를 멀티 프로세스,
하나의 프로세스를 여러개의 스레드로 진행하는 것을 멀티 스레드라고 한다.
어떤 차이가 있을까?
화면에 출력되는 결과는 같지만, 내부적으로는 큰 차이가 있다.
프로세스를 fork하면 코드/데이터/힙 영역 등 모든 자원이 복제되어 저장되는데, 저장된 메모리 주소를 제외한 모든 것이 동일한 프로세스 두 개가 통째로 메모리에 적재되는 것과 같다. 즉 3번, 4번 fork한다면 메모리에는 같은 프로세스가 3번, 4번 쌓이게 되는 것이다. 이것이 멀티 프로세스의 경우이다.
(참고로 실제로는 쓰기 시 복사 (copy on write) 기법을 이용한다. 추후에 알아보자)
앞서 말했듯 프로세스를 이루는 스레드들은 자원을 공유하기 때문에 멀티 스레드는 하나의 PCB를 가지며, 하나의 프로세스에 있는 코드/데이터/힙 영역의 자원을 공유한다.
프로세스끼리는 자원을 공유하지 않지만 불가능한 것은 아니다. IPC(프로세스 간 통신)를 통해 자원을 주고 받을 수 있다. 또 파일을 통한 프로세스 간 통신, 공유 메모리를 통한 프로세스 간 통신이 있다.