스레드는 실행의 단위이다. 조금 더 정확하게 표현하자면, 스레드란 프로세스를 구성하는 실행의 흐름 단위이다.
스레드는 프로세스 내에서 각기 다른 스레드ID, 프로그램 카운터 값, 레지스터 값, 스텍으로 구성되어 있기 때문에 스레드마다 각기 다른 코드를 실행할 수 있다.
그와 동시에 한 프로세스 내의 스레드들은 같은 프로세스의 자원을 공유한다.
프로세스가 실행되는 프로그램이라면 스레드는 프로세스를 구성하는 실행의 흐름 단위이다. 대부분의 운영체제에서 CPU에 처리할 작업을 전달하는 단위를 스레드로 하고 있다.
주의) 리눅스 운영체제에서는 프로세스와 스레드 간에 명확한 구분을 짓지 않는다. 리눅스에서는 프로세스와 스레드라는 말 대신 태스크(task)라는 이름으로 통일하여 명명한다.
멀티프로세스: 여러 프로세스를 동시에 실행하는 것
멀티스레드: 여러 스레드로 프로세스를 동시에 실행하는 것
스레드끼리는 같은 프로세스 내의 자원을 공유한다.
코드 영역, 데이터 영역, 힙 영역, 파일 영역 같은 메모리를 공유한다.
레지스터, 스텍, 프로그램 카운터를 스레드마다 따로 갖기 때문에 다른 실행의 흐름을 가져갈 수 있다.
장점
여러 프로세스를 병행 실행하는 것보다 메모리를 더 효율적으로 사용할 수 있다.
스레드간 자원을 공유하기 때문에 협력과 통신에 유리하다.
단점