쓰레드는 운영체제가 프로세스 내에서 작업을 병렬로 실행하기 위해 사용하는 기본 실행 단위입니다. 리눅스와 윈도우는 이 쓰레드를 관리하고 스케줄링하는 방식에서 서로 다른 모델을 채택하고 있으며, 이러한 차이는 시스템 성능과 프로그래밍 방식에 영향을 미칩니다.
🐧 리눅스 쓰레딩 모델: N:1 및 1:1 혼합 (NPTL) 리눅스는 역사적으로 다양한 쓰레딩 모델을 거쳐왔으나, 현재는 **NPTL(Native POSIX Thread Library)**이라는 1:1 모델과 N:1 모델의 장점을 결합한 형태가 주류입니다.
1. 핵심 개념: 경량 프로세스 (LWP, LightWeight Process) 리눅스 커널의 관점: 리눅스 커널은 프로세스와 쓰레드를 구분하지 않고, 모두 태스크(Task) 또는 **경량 프로세스(LWP)**로 취급하고 스케줄링합니다. 쓰레드의 생성: POSIX 쓰레드(pthreads) 라이브러리를 통해 쓰레드를 생성하면, 커널에 새로운 LWP가 생성됩니다. 이 LWP들은 부모 프로세스의 주소 공간, 파일 디스크립터 등을 공유하며, 각자의 실행 문맥(Context)을 가집니다. 2. 모델 유형: 1:1 모델 특징: 사용자 공간의 **각 쓰레드(N)**가 커널 공간의 각각의 스케줄링 가능한 엔티티(1), 즉 LWP에 직접적으로 대응됩니다. 장점: 진정한 병렬성: 멀티 코어 환경에서 여러 쓰레드가 동시에 병렬로 실행될 수 있습니다. 커널 지원: 특정 쓰레드가 I/O 작업 등으로 블록(Block) 상태가 되더라도, 커널은 해당 프로세스의 다른 쓰레드들을 계속 스케줄링할 수 있습니다. 단점: 쓰레드 생성 및 컨텍스트 전환 시 커널 오버헤드가 발생합니다. 요약: 리눅스는 POSIX 표준을 따르며, 사용자 레벨의 쓰레드가 커널 레벨의 프로세스와 유사한 경량 프로세스로 매핑되는 1:1 모델에 가깝습니다.
...