2012-11-28 3 views
3

IO를 차단하고 완료 될 때까지 기다리는 C# 스레드가 있다고 가정합니다. 이제 OS 스케줄러는 CPU 시간을줍니다. 그것을 즉시 돌려 주거나, 아무것도하지 않는 실에 의해 사용 되나요? 아니면 완전히 다른 것입니까?IO를 기다리는 스레드가 CPU를 차단합니까?

+1

스레드가 I/O에서 차단되는 경우 OS 스케줄러는 CPU 시간을 전혀주지 않습니다. 즉, 선제 스케줄러를 사용하는 이유의 99 %가 빠르며 효율적인 응답을 제공합니다 I/O 요청 @nanda 대답을 참조하십시오. –

답변

5

Windows에서 파일 시스템 인터페이스 나 다른 장치를 통해 액세스 할 수있는 모든 장치의 IO를 차단하면 해당 장치와 연결된 드라이버와 이벤트 개체에 대한 핸들과 함께 IO 요청을 전송 한 다음 호출 스레드를 차단합니다 그 이벤트 객체를 기다려서. (드라이버가 IO를 완료하면 이벤트가 발생합니다.) 따라서 스레드가 IO를 차단할 때 CPU는 이벤트 핸들에서만 대기하므로 CPU를 방해하지 않습니다.

차단 IO API는 모두 구현 방식이 미묘한 차이가 있지만 이러한 방식으로 작동합니다.

관련 문제