Тест однопоточный и 1000 раз вызывает функцию «вычислить». Эта функция суммирует все целые числа от 0 до 10 000 000 примерно за 0,6 секунды. Это возвращает фактическое время стены, которое потребовалось, чтобы выполнить этот расчет. Тест отслеживает минимальное время, сумму раз и сумму квадратов. После 1000 вызовов вычисляются и печатаются значения среднего, стандартного отклонения и занятости чем-то другим.
Занято чем-то еще: sum_time - минимальное время * number_of_loops
Значение занятости чем-либо в MacOS, Linux / Ubuntu и iPad составляет от 0,493% до 4,050%. Это ожидаемая плата от ОС.
Результаты в Windows постоянно выше (лучшие и худшие из 10):
>python test.py
Busy with something else 9.723% or 58.734 from 604.051 seconds
min = 0.545 mean = 0.604 stdev = 0.133
>python test.py
Busy with something else 16.230% or 105.709 from 651.320 seconds
min = 0.546 mean = 0.651 stdev = 0.194
Информация о моем компьютере с Windows:
2.4 GHz Intel Core i5-6300U, Memory 4 GB
Microsoft Windows [Version 10.0.17763.379]
Python version 3.7.2, Executing in 64bit
Тест:
import time
import sys
def calculate():
start = time.perf_counter()
result = 0
for i in range(10000000):
result += i
stop = time.perf_counter()
return stop - start
number_of_loops = 1000
min_time = sys.maxsize
sum_time = 0.0
sum_time_square = 0.0
for _ in range(number_of_loops):
t = calculate()
min_time = min(min_time, t)
sum_time += t
sum_time_square += t ** 2
mean = sum_time / number_of_loops
stdev = ((sum_time_square + number_of_loops * mean**2 - 2.0 * mean * sum_time) /
(number_of_loops - 1.0)) ** 0.5
busy_with_else = sum_time - min_time * number_of_loops
print('Busy with something else %.3f%% or %.3f from %.3f seconds' %
(100.0 * busy_with_else / sum_time, busy_with_else, sum_time))
print('min = %.3f mean = %.3f stdev = %.3f' % (min_time, mean, stdev))
Все тесты, выполненные в системах в состоянии ожидания перед тестом. Результат аналогичного теста C ++ для Windows составляет от 0,626% до 2,059%. Так что винить не винду.
Это просто мое программное / аппаратное обеспечение или его можно воспроизвести и / или объяснить?