Что именно происходит, когда спит нить - PullRequest
5 голосов
/ 19 февраля 2010

Мне было интересно, как планировщик задач в операционной системе обрабатывает спящие потоки.

Под этим я подразумеваю, все еще ли спящий поток все еще проверяется планировщиком или просто пропускается полностью, когда выясняется, какой поток активенв течение следующих 10 мс или сколь угодно долго это дается.

Моя причина спрашивать это, чтобы выяснить, потребляет ли спящий поток циклы ЦП (хотя и очень мало).

Так кто-нибудь знаетчто происходит?

А вы знаете, отличается ли он от Windows до Linux?

Ответы [ 2 ]

11 голосов
/ 19 февраля 2010

Поток запускается, когда процессор выполняет инструкции для этого потока. Планировщик передает процессор в работающие потоки. Спящий поток - это просто запись во внутренних таблицах планировщика; этот поток не потребляет ЦП на себя, так как планировщик знает, что поток не работает, и, следовательно, не дает ему ЦП. Запись концептуально содержит время, когда поток должен быть разбужен.

Спящий поток может иметь косвенные затраты во времени управления самим планировщиком. Это действительно зависит от структур и алгоритмов, используемых планировщиком; Ходят слухи, что планировщик ядра Linux отлично справляется с управлением тысячами спящих потоков, не тратя слишком много времени на то, чтобы решить, какой поток запустить. Некоторые другие операционные системы также не работают, но, как правило, этот эффект незначителен, когда общее количество потоков / процессов меньше тысячи.

0 голосов
/ 19 февраля 2010

Это зависит от реализации ОС, но обычно существует структура данных «планируемых потоков», чтобы повысить эффективность.

Но некоторая служебная задача, вероятно, должна иногда просматривать список всех существующих потоков, даже если не в каждом цикле планирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...