2010-08-16 2 views
2

Я выполнил одну программу, и когда я вычислил время, прошедшее, я обнаружил, что время не является постоянным. Он варьируется под некоторым диапазоном. Я хотел знать, почему это так?Почему время меняется?

+5

Потому что ваш компьютер делает несколько вещей. – GManNickG

+3

Ничто не является постоянным (кроме 'const'): P – alex

+0

Единственное постоянное значение -« Изменить ». –

ответ

6

Поскольку существует несколько процессов, выполняющихся одновременно с вашим приложением.

Даже если вам удалось полностью изолировать ваше приложение, нет никаких гарантий, что один и тот же код будет работать с одинаковой скоростью каждый раз. Вот почему вы должны действительно получать средние значения за несколько запусков, если вы тестируете производительность (предполагая, что это то, что вы здесь делаете).

Если вы измеряете эффективность, есть более объективные/формальные способы его определения:
См:Big-O notation

2

Вы часто этот вид поведения, когда вы измеряете истекшее время. Это потому, что прошедшее время зависит от всех других вещей, которые может делать ваш компьютер.

Смотрите, например:

pax> time sleep 1 
real 0m1.012s 
user 0m0.004s 
sys 0m0.000s 

pax> time sleep 1 
real 0m1.002s 
user 0m0.004s 
sys 0m0.000s 

pax> time sleep 1 
real 0m1.007s 
user 0m0.004s 
sys 0m0.000s 

Во всех этих случаях, истекшее real время меняется, но фактическое использование процессора, user+sys удивительно последователен.

Для определения времени вы должны использовать наиболее точные измерения, которые вы можете (например, user+sys) для устранения внешних воздействий. Вы также должны использовать статистические методы для получения более точной картины.

Например, я, как правило, выполняю двенадцать пробегов, выбрасываю выбросы (самые быстрые и медленные), а затем усредняю ​​оставшиеся десять.

+1

Здесь 'user + sys' является только последовательным, потому что код тривиален. Реальный код будет иметь разные значения 'user' и' sys', если выполняются другие процессы из-за загрязнения кэша, конфликтов ресурсов (например, если выполняются несколько процессов io) и т. Д. –

+0

Несомненно, но точка, которую я делал, использовать меру настолько точно, насколько это возможно - 'user + sys' по-прежнему является более точным, чем прошедшее время, а статистическое усреднение смягчит последствия этих других факторов. – paxdiablo

Смежные вопросы