2010-02-19 6 views
4

운영 체제의 작업 스케줄러가 휴면 스레드를 처리하는 방법에 대해 궁금합니다.스레드를 잠자기 할 때 정확히 무엇이 발생합니까?

이것은 내가 잠자는 스레드가 여전히 스케줄러에 의해 검사되는지, 아니면 다음 10ms 동안 어떤 스레드가 활성 상태인지 또는 얼마 동안 기다릴지를 결정할 때 완전히 건너 뛴다는 것을 의미합니다.

내가 묻는 이유는 절전 모드 스레드가 CPU 사이클을 소비하는지 여부를 파악하기 위해서입니다 (극소수 ​​임에도 불구하고).

아무도 어떻게됩니까?

그리고 Windows와 다른 점이 있습니까?

+1

질문의 첫 번째 부분은 "wait()와 sleep()의 차이점"에 답변되어 있습니다. http://stackoverflow.com/questions/1036754/difference-between-wait-and-sleep – David

답변

9

CPU가 해당 스레드에 대한 명령어를 실행할 때 스레드가 실행됩니다. 스케줄러는 실행 가능한 스레드에 CPU를 넘깁니다. 휴면 스레드는 스케줄러 내부 테이블에 대한 항목입니다. 그 쓰레드는 쓰레드가 실행 가능하지 않다는 것을 스케줄러가 알기 때문에 그 자신에게 CPU를 소비하지 않으므로 그에게 CPU를주지 않는다. 엔트리는 스레드가 깨어날 시간을 개념적으로 포함합니다.

수면 스레드는 스케쥴러 자체가 관리 시간에 간접 비용을 가질 수 있습니다. 이는 실제로 스케줄러가 사용하는 구조와 알고리즘에 달려 있습니다. 리눅스 커널 스케줄러는 실행해야 할 쓰레드를 결정하는데 너무 많은 시간을 들이지 않고도 수면 상태의 수천 개의 쓰레드를 관리하는 데 매우 능숙하다는 소문이 돌고있다. 일부 다른 운영 체제도 마찬가지지만 엄지 손가락으로 말하면 총 스레드/프로세스 수가 1,000 개 미만인 경우이 영향은 무시할 수 있습니다.

+0

친절하고 철저한 설명 , 고맙습니다 :-) – Steffen

0

OS 구현에 따라 다르지만 대개 작업을보다 효율적으로 유지하는 "스케줄 가능한 스레드"데이터 구조가 있습니다.

그러나 일부 하우스 키핑 작업은 모든 예약주기가 아닐지라도 때때로 모든 기존 스레드 목록을 가끔씩 봐야합니다.

관련 문제