인프런 커뮤니티 질문&답변

hylim님의 프로필 이미지
hylim

작성한 질문수

자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]

사용자 수준 스레드 & 커널 수준 스레드

스레드 라이브러리는 커널과 같은 역할을 하지 못하나요?

작성

·

50

0

강의와 다른 질의응답을 확인하였을 때,

 

사용자 수준에서 사용자 레벨 스레드 생성을 스레드 라이브러리가 관리하고, 관리의 범위는 스레드의 생성 및 소멸, 스케쥴링, 컨텍스트 스위칭을 할 수 있다고 말씀해주셨습니다!

 

그런데 다대일 스레드 매핑 모델의 특징에서 한 프로세스에 속해있는 사용자 수준 스레드들 중 하나가 block되면 프로세스 전체가 block이 되는데, 이는 커널에서 프로세스가 가지고 있는 개별적인 스레드를 인지하지 못하고, 그냥 하나의 스레드로 인지해서 대체할 스레드를 찾지 못함이라고 질의응답에서 확인 하였는데요,

 

강의 내용대로 스레드 라이브러리가 사용자 스레드를 관리하기 위해 많은 작업을 하고 있는데,

사용자 스레드 라이브러리에서 사용자 수준 스레드 중 일부가 블락되었을 때 커널 대신 다른 대기 중인 스레드를 ready > run 상태로 변경할 수는 없는 건가요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. hylim님.

사용자 수준 스레드와 커널 수준 스레드의 관리 및 스케줄링의 차이에 대해 궁금해하셨군요. 질문에 대한 답변을 드리기 전에 유사한 질문에 대한 기존 답변 링크를 제공해 드리겠습니다. 이 링크들을 통해 더 깊이 있는 내용을 확인하실 수 있습니다:

  1. 다대일과 다대다 스레드 매핑 Block I/O시 질문

  2. 스레드 중지 – flag variable vs interrupt() - 2 강의에서 질문

  3. 동시성과 병렬성 질문

최낙도님의 질문과 비슷한 내부적인 구조를 이해하는 데 도움이 되는 내용이 많습니다. 간단히 요약해보자면:

사용자 수준 스레드와 커널 수준 스레드의 차이

  • 사용자 수준 스레드: 주로 사용자 라이브러리에 의해 관리되며, 커널은 개별 사용자 스레드를 인식하지 못합니다. 사용자 수준 스레드는 커널의 인터럽트 없이 빠르게 생성하고 스위칭할 수 있다는 장점이 있지만, 커널에서 블록 상태로 간주될 때 전체 프로세스가 블록될 수 있습니다.

  • 커널 수준 스레드: 각 스레드가 커널에 의해 직접 관리되며, 커널은 각 스레드를 개별적으로 스케줄링할 수 있습니다. 이를 통해 스레드 중 하나가 블록되더라도 다른 스레드가 계속 실행될 수 있습니다.

다대일 스레드 모델에서의 블로킹 문제

다대일 스레드 모델에서는 사용자 수준 스레드를 관리하는 라이브러리가 있다고 하더라도, 커널은 오직 하나의 스레드만 인지합니다. 사용자 수준 스레드 중 하나가 블록 상태가 되면, 커널은 이를 전체 프로세스가 블록된 것으로 간주합니다. 이로 인해 다른 사용자 스레드가 실행되지 못하고 전체 프로세스가 블록되는 문제가 발생합니다.

사용자 스레드 라이브러리의 역할

사용자 스레드 라이브러리는 스레드의 생성, 소멸, 스케줄링 등을 관리하지만, 커널의 역할을 완전히 대신하지는 못합니다. 결국 사용자 스레드 라이브러리가 다른 사용자 스레드를 실행 상태로 변경하더라도, 커널이 이를 인지하지 못하기 때문에 실제 CPU에서 실행되지는 않습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

hylim님의 프로필 이미지
hylim

작성한 질문수

질문하기