Это промежуточный ответ - я не знаю соответствующих внутренних компонентов linux, надеюсь, что эксперт может прийти и разобраться с этим.
Одна из возможностей заключается в том, что 69us - это просто сырые накладные расходы на планирование и планирование.затем перепланировать поток.Несмотря на короткий сон, ядро может проделать большую работу для переключения контекста (или половины переключения контекста, если нечего планировать), а затем отменить его почти немедленно.Я не знаю, сколько времени это «должно» занять на linux на типичном ПК.
Если это не объясняет, у планировщика обычно есть понятие «временного интервала», то есть как долгозапланированный поток останется запущенным до того, как планировщик подумает о его переключении, если только он не отменяет сам себя, или что-то с более высоким приоритетом становится планируемым.Ядро будет иметь низкоуровневые таймеры, запускающие прерывания в конце временного интервала (в дополнение к прерываниям, которые запускаются для некоторых других событий, таких как ввод / вывод, которые могут разблокировать поток).Когда временной интервал заканчивается, планировщик может решить, продолжить ли тот же поток или переключиться на другой.
Так что, когда вы спите, похоже, либо (а) планировщик фактически не устанавливает таймерэто сделает ваш поток планируемым в запрошенное время, он просто ожидает временной интервал, и поэтому процессор простаивает дольше, чем необходимо;или (b) он делает ваш поток планируемым в запрошенное время, но когда вы прекратили выполнение в спящем режиме, вошел какой-то другой поток с равным приоритетом, и у планировщика нет оснований предпочитать вас этому, пока не наступит ваша очередь«опять же, согласно тем правилам, которые обычно использует планировщик, чтобы решить, какой поток запланировать.
69us довольно короток, чтобы быть артефактом временного среза.Вы можете задержать на очень короткие периоды, сидя в цикле, проверяя время, как спин-блокировка.Однако, как говорят все остальные, в системе не в реальном времени, более или менее по определению, вы не можете требовать, чтобы планировщик запускал ваш поток в любое конкретное время.Даже в системе реального времени, если вы конкурируете с потоками с равным приоритетом, вы можете проиграть, а если вы конкурируете с потоками с более высоким приоритетом, вы потеряете .