present 2012. 4. 23. 21:40


내가 궁금했던 쓰레드 스케쥴링에 대해 웹서핑 하다가 사용자 레벨 쓰레드 및 커널 레벨 쓰레드에 대한 질문-답변 글을 발견했다.(http://kldp.org/node/295)


사용자 레벨 쓰레드는 사용자 수준에서 여러 개가 돌아가더라도 커널에서 스케쥴링할 때는 여전히 하나의 프로세스(혹은 스케쥴링 단위) 로 보게 된다.

예를 들어 사용자 레벨 쓰레드들 중 하나가 I/O 및 그 밖의 시스템 콜 등으로 블록킹 상태에 놓일 경우, 동일 프로세스에 존재하는 나머지 쓰레드 들은 CPU 시간을 부여 받지 못하게 되어 마치 같이 블록킹 당하는 것 처럼 보이게 된다.


커널 레벨 쓰레드는 커널이 쓰레드들을 각기 하나의 스케쥴링 단위로 보는 것이기 때문에 쓰레드 하나가 블록킹 당해도 나머지는 CPU 시간을 부여 받을 수 있게 된다. 그러나 순수 커널 레벨 쓰레드 간 전환은 동일 프로세스 내의 사용자 레벨 쓰레드 간 전환과 달리 Context Switch가 발생하게 된다. 빈번한 Switch 는 오버헤드를 발생하기 때문에 문제가 있음.


자세한 설명 및 다른 분류에 속하는 쓰레드는 앞에서 언급한 주소에 들어가 답변들을 참조하면 된다.