2012-05-29 9 views
2

커널 수준 스레드의 경우 하나의 스레드가 일부 I/O를 차단하면 다른 스레드는 자유롭게 실행될 수 있지만 사용자 수준 스레드에서는 하나의 스레드가 차단되면 어떻게됩니까?프로세스의 스레드 간 컨텍스트 전환

해당 프로세스가 차단 된 채로 유지됩니다. 즉 다른 스레드가 실행되지 않거나 다른 스레드가 실행되도록 예약되지 않습니다. 정확히 어떻게됩니까?

+0

"녹색 스레드"에 대해 말하는 사용자 수준 스레드를 말할 때를 가정합니다. http://en.wikipedia.org/wiki/Green_threads – Gray

+0

http://stackoverflow.com/questions/1178785/user-thread-and-kernel-thread에 관련됨 – Gray

답변

3

사용자 수준 스레드는 순차적 방식으로 실행되는 사용자 코드 조각입니다. 한 스레드는 잠시 동안 실행 한 다음 다른 스레드로 제어를 전달합니다. 그 스레드 중 하나가 syscall을 작성하면 프로세스가 전체 블록으로 차단됩니다. 사용자 수준의 스레딩은 커널에 대한 단일 스레드 프로세스처럼 보입니다. 여러 CPU에서 동시 스케줄링이 가능하지 않습니다.

커널 수준 스레드의 주요 장점은 서로 독립적으로 실행되며 다른 CPU에서 예약 될 수 있다는 것입니다. 하나가 차단되면 나머지는 계속 실행됩니다.

+0

그러나 내가 알기로는 재킷을 사용하여 차단 시스템 호출을 ULT에 대한 비 차단 시스템 호출로 변환 할 수 있습니다. 따라서 하나의 스레드가 차단되면 제어를 다른 스레드로 전달합니다 (스레드 라이브러리를 통해). – Luv

+0

예, 비 블로킹 I/O를 사용하는 것은 사용자 수준 스레딩의 한계를 우회하는 한 가지 방법입니다. 그러나 코드 나 쓰레딩 라이브러리에 복잡성이 추가됩니다. 그것은 모든 트레이드 오프의 문제입니다 : 하나의 스레딩 방법을 다른 스레딩 방법보다 많이 사용하면 얻을 수있는 것과 잃는 것. –