Время настенных часов измеряет фактическое истекшее время и включает время ожидания, в то время как время процессора измеряет только время, используемое для активной обработки инструкций.
Когда вы реализовали несколько параллельных структур данных и выполняете измерения, используя структуру, которая позволяет вамустановить параметр «рабочего времени»: для каждого вызова добавления и удаления моделируется некоторая дополнительная (полностью распараллеливаемая) работа.
Это реализовано с использованием настенных часов:
long endTime = System.nanoTime() + workTime;
while (System.nanoTime() < endTime); // busy wait
Альтернативный подход заключается в реализации этого с использованием процессорного времени:
long endTime = System.nanoTime() + workTime;
while (bean.getCurrentThreadCpuTime() < endTime); // busy wait
Какой из двух будетболее реалистичный способ имитации дополнительной работы?
Как это влияет на результаты, если вы выполняете больше потоков, чем имеется параллелизм на машине?