Здравствуйте, rh2000, Вы писали:
R>1. Вызов Sleep(0) был поставлен сознательно для ужесточения условий тестирования. Как я указал в заметке, тесты предназначены для оценки общих издержек на переключение между потоками. Пусть уж лучше эти издержки будут немного завышены, чем занижены
Кстати, а вызов Sleep(0) точно вызвает переключение контекста, нет ли там проверки if( Period == 0 ) return? Помнится, я написал ради эксперимента цикл.
for(;;)
Sleep( 0 );
И запустил. Других активных потоков не было. Загрузка процессора была 100%. Замена на Sleep(1) сразу уронила загрузку до 2-3%.
Или это происходит потому, что планировщик берёт на себя управление, смотрит, нет ли других кандидатов, их нету и сразу запускает поток ещё раз? А, типа, в случае Sleep(1) он считает обязанным хоть сколько-то потормозить?