Частота 4 ГГц - 0,25 секунды на такт. 10 нс - это 40 тиков или 40 инструкций, которые дают или берут.
Запрашивать задержку в 10 нс для обозначения чего-либо довольно нелепо; время, необходимое для вычисления текущего времени, может легко превысить 10 нс.
Итак, что вы измеряете здесь:
start = steady_clock::now();
future.wait_for(10ns);
end = steady_clock::now();
std::cout << "10 -> " << (end - start).count() << '\n';
время, необходимое для расчета текущего времени, ожидания служебных данных (проверьте, готово ли оно и т. Д.).
Во втором случае:
start = steady_clock::now();
future.wait_for(100000ns);
end = steady_clock::now();
std::cout << "100000 -> " << (end - start).count() << '\n';
разница составляет около 50000 нс. Это 1/20000 секунды.
Здесь мы могли бы сделать что-то вроде перевода процессора в режим пониженного энергопотребления или даже настройки спин-блокировки.
Возможно, вы переключаете контекст, но я бы не подумал; переключение на другой контекст и затем обратно, вероятно, стоило бы слишком дорого, чтобы беспокоиться здесь.
Время на интерактивной ОС обычно составляет порядка 1/50 секунды или порядка 20000000 нс при наличии конфликтов в ЦП.