프로세스 내에서 실제로 작업을 수행하는 주체를 의미합니다.
모든 프로세스에는 한 개 이상의 스레드가 존재합니다. 두 개 이상의 스레드를 가지는 프로세스는 멀티스레드 프로세스라고 합니다.
스레드는 자신의 Stack 영역을 보유하고 Code/Data/Heap 영역은 같은 프로세스 안에서 다른 스레드와 공유합니다.
스레드는 고유하게 Program Counter, Stack Pointer, Registers, Stack 등이 있습니다.
여러 개의 작업 단위로 구성된 프로그램에서 요청을 동시에 처리하기 위해 스레드를 사용합니다.
CPU가 하나인 환경에서 여러 스레드가 Context Switching에 의해 동시에 수행되는 것처럼 보이는 동시성 방식으로 작동합니다.
여러 CPU 환경에서 여러 스레드가 실제로 동시에 수행되는 병렬성 방식으로 작동합니다.
멀티 스레드 프로그래밍에서 어떤 공유 자원에 여러 스레드가 동시에 접근해도 프로그램 실행에 문제가 없는 상태를 의미합니다.
스레드 안전을 지키기 위한 방법은 다음과 같습니다.
미리 스레드를 생성해두고 작업하는 방식입니다. 스레드를 몇 개 생성해두고 모든 작업을 그 한정된 스레드를 재활용하며 작업하는 것입니다.
스레드 풀을 사용하지 않으면 스레드를 생성하기 위해 메모리를 계속 사용해서 메모리가 고갈될 수 있습니다. 또한 Context Switching도 계속 발생하기 때문에 오버헤드가 발생하게 될 것입니다.
스레드 풀은 메모리에 미리 스레드를 생성해놓고 그 스레드를 사용하기 때문에 언급했던 문제들을 해결할 수 있습니다.