Подтвердить что ты не робот

Понимание time.perf_counter() и time.process_time()

У меня есть некоторые вопросы о новых функциях time.perf_counter() и time.process_time().

Для первого из документации:

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

Является ли это "высокое разрешение" одинаковым для всех систем? Или это всегда слегка зависит, если, например, мы используем окна ручного окна?
Вопрос исходит из того, что при чтении документации time.time() говорится, что "не все системы обеспечивают время с лучшей точностью, чем 1 секунду", так как теперь они могут обеспечить лучшее и более высокое разрешение?

О последнем, time.process_time():

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

Я не понимаю, что такое "системное время" и "время процессора пользователя"? Какая разница?

4b9b3361

Ответ 1

В этом контексте есть два разных типа "время": абсолютное время и относительное время.

Абсолютное время - это "реальное время", которое возвращается time.time() и с которым мы все привыкли. Обычно это измеряется с фиксированной точки времени в прошлом (например, UNIX-эпоха 00:00:00 UTC 01/01/1970) с разрешением не менее 1 секунды. Современные системы обычно обеспечивают милли- или микросекундное разрешение. Он поддерживается специальным оборудованием на большинстве компьютеров, схема RTC (часы реального времени) обычно питается от батареи, поэтому система отслеживает реальное время между бонусами. Это "реальное время" также может быть изменено в зависимости от вашего местоположения (временные зоны) и сезона (летнее время) или выражено как смещение от UTC (также известное как GMT или Zulu time).

Во-вторых, есть относительное время, которое возвращается time.perf_counter и time.process_time. Этот тип времени не имеет определенного отношения к реальному времени, в том смысле, что отношения являются специфическими для системы и реализации. Его можно использовать только для измерения временных интервалов, т.е. Значения без единицы, которое пропорционально времени, прошедшему между двумя моментами. Это в основном используется для оценки относительной производительности (например, выполняется ли эта версия кода быстрее, чем эта версия кода).

В современных системах он измеряется с помощью счетчика CPU, который монотонно увеличивается с частотой, связанной с аппаратными часами ЦП. Разрешение счетчика сильно зависит от аппаратного обеспечения системы, значение не может быть надежно связано с реальным временем или даже сравнивается между системами в большинстве случаев. Кроме того, значение счетчика reset при каждом включении CPU или reset.

time.perf_counter возвращает абсолютное значение счетчика. time.process_time - это значение, которое выводится из счетчика ЦП, но обновляется только тогда, когда данный процесс выполняется на ЦПУ и может быть разбит на "пользовательское время", это время, когда сам процесс запускается на ЦПУ, и "системное время", которое является временем, когда ядро ​​операционной системы работает на процессоре от имени процесса.