스레드(Thread)
- 많은 프로그램들의 경우 독립적인 일들을 불필요하게 순차적으로 수행하는 사실을 개선할 목적으로 사용
- 스레드: 프로세스보다 작고 독립적으로 스케줄링이 가능한 프로그램 (CPU에 보내져 실행되는 단위)
- 스레드 특징
- 각 스레드는 서로 독립적
- 스레드의 실행/종료 순서는 예측할 수 없음
- 스레드는 자신의 스택, 프로그램 카운터, 레지스터를 가짐
- 프로그램에 있는 스레드의 수는 다른 스레드에게 알려지지 않음
- 스레드는 프로그램의 외부에서는 보이지 않음
- 스레드는 서로 독립적이지만, 한 스레드가 취한 행동은 프로세스에 있는 다른 스레드에 영향을 미침
- 스레드는 프로세스의 일부분이기 때문에 프로세스의 자원들을 공유하지만 그 자신의 처리시간과 스택, 레지스터들이 할당됨
- 한 프로세스가 exit() 시스템 콜을 통해 종료한다면, 모든 스레드들도 종료
- 스레드는 주소 공간을 공유하는 것 외에도 개방된 파일과 자식 스레드, 타이머, 시그널 등을 공유함
스레드와 프로세스 포함정보
프로세스와 다중 스레드
- (b)와 같이 다중 스레드형 프로세스의 경우 각각의 스레드는 힙 영역, 정적 영역, 코드를 공유하지만, 자기 고유의 레지스터와 스택을 가지고 있음
- (a)와 같은 단일 스레드형은 하나의 스레드가 자신의 힙 영역, 정적 영역, 코드 그리고 레지스터들과 스택을 가짐
- 다중 스레딩이란 다수의 스레드를 이용해서 하나의 프로그램을 동시에 처리하는 것
-> 하나의 프로세스 자체에 다수의 실행 단위들이 존재하여 작업의 수행에 필요한 자원들을 공유하기 때문에 자원의 생성 및 관리가 중복되는 것을 최소화할 수 있음
- (예) 다수의 클라이언트가 동시에 단일 웹 서버로 접속할 경우
- 스레드를 사용하지 않고 프로세스로 구현하는 상황이라면
- 웹 서버는 한 사용자의 서비스 요청이 끝난 후 다음 사용자에게 서비스를 제공해야 함
- 100명이 동시에 웹 서버에 연결하여 서비스를 제공받을 경우 마지막에 연결된 사용자는 99명의 사용자 요청이 끝난 후에 서비스를 제공받기 때문에 오랜 시간 기다려야만 함
- 그러나 이 경우 다중 스레드로 서비스를 제공한다면 서비스를 수행 받기 위해 더 이상 기다릴 필요가 없음
- 중량 프로세스(HWP: Heavy Weight Process)
- 하나의 스레드를 가진 프로세스
- 프로세스 내에 스레드가 없다면 프로세스는 수행될 수 없으며, 스레드는 프로세스 내에 필히 존재해야 함
- 각각의 스레드는 자신의 레지스터와 스택을 가짐
- 경량 프로세스(LWP: Light Weight Process)
- 프로세스 내에 두 개 이상의 스레드를 포함하고 있을 경우 그 각각을 말함
- 그것들은 같은 프로그램 코드, 데이터, 시스템 자원들을 이용하며, 반면에 각각의 프로그램 카운터, 레지스터들과 스택을 가짐
- 단일 프로세서 상의 메모리나 다중 프로세서 상의 단일 공유 메모리에서 실행된다