목차
쓰레드
쓰레드는 프로세스 내에서 실행되는 실행 단위로, 프로세스의 자원을 공유하면서 동시에 실행될 수 있습니다.
쓰레드는 프로세스의 가장 작은 실행 단위로 정의되며, 각 쓰레드는 별도의 프로그램 카운터, 레지스터 세트, 스택을 가지고 있지만, 힙과 같은 메모리와 리소스는 다른 쓰레드와 공유합니다.
쓰레드의 역할
1.
병렬 처리 : 쓰레드는 여러 작업을 동시에 수행할 수 있게 해주어, 애플리케이션의 처리량을 높이고 응답 시간을 단축시키는 병렬 처리를 가능하게 합니다.
사실 이 부분은 개인적으로 멀티 쓰레드의 역할보다는 멀티 코어의 역할이라고 생각합니다.
단일 코어에서도 멀티 쓰레드를 실행시킬 수 있지만, 진정한 의미의 병렬 처리는 멀티 코어에서 이루어집니다. 같은 프로세스를 여러 스레드로 실행시키는 것, 이것이 바로 진정한 멀티 쓰레드의 병렬 처리 역할이라고 생각합니다.
2.
자원 공유의 용이성 : 같은 프로세스 내의 쓰레드들은 메모리와 리소스를 공유할 수 있습니다. 이는 데이터를 교환하고 작업을 조율하기 위한 오버헤드를 줄여줍니다.
쓰레드는 프로세스 내에서 메모리 영역을 공유하기 때문에, 프로세스 간 통신(IPC)이 필요 없습니다.
그러나, 같은 메모리 영역을 공유하다 보니 데이터 동기화 문제가 발생할 수 있습니다. 이에 대한 자세한 설명은 멀티 쓰레드를 다루는 과정에서 제공하겠습니다.
CPU와 쓰레드
이전에 설명했던 모든 내용은 프로세스를 기준으로 설명되었습니다.
그러나, 쓰레드와 멀티 쓰레드 개념이 도입되면서 기준이 프로세스에서 쓰레드로 변경되었습니다.
예를 들어, 레지스터 관리에도 PCB를 사용하지만, 주로 TCB를 기준으로 계산이 이루어집니다. 심지어 스케줄링 과정조차 프로세스 다음으로 쓰레드 스케줄링이 진행됩니다.