python教程—理解time.perf_counter()和time.process_time()-Python实用宝典

python教程—理解time.perf_counter()和time.process_time()

我对新函数time.perf_counter()和time.process_time()有一些疑问。对于前者,从文件中:

我对新函数time.perf_counter()和time.process_time()有一些疑问。

对于前者,从文件中:

返回性能计数器的值(以小数秒为单位),即具有最高可用分辨率的时钟 ,用于测量短时间。它确实包括在睡眠期间所花费的时间,并且是全系统的。返回值的引用点是未定义的,因此只有连续调用的结果之间的差异是有效的。

这个“最高分辨率”在所有系统上都是一样的吗?或者它总是稍微依赖于,例如,我们使用linux还是windows?
问题来自于阅读time.time()的文档,它说“并不是所有系统提供的时间精度都高于1秒”,那么现在它们如何提供更好、更高的分辨率呢?

关于后者,time.process_time():

返回当前进程的系统和用户CPU时间之和(以小数秒为单位)。它不包括在睡眠中消耗的时间。根据定义,它是过程范围的。返回值的引用点是未定义的,因此只有连续调用的结果之间的差异是有效的。

我不明白,什么是“系统时间”和“用户CPU时间”?有什么区别呢?

回答

在这里,时间有两种不同的类型:绝对时间和相对时间。

绝对时间是“真实世界的时间”,由time.time()返回,我们都使用它来处理。它通常从过去的某个固定时间点(例如,UNIX纪元在01/01/1970的00:00:00 UTC)以至少1秒的分辨率测量。现代系统通常提供毫秒或微秒分辨率。它是由大多数计算机上的专用硬件维护的,RTC(实时时钟)电路通常由电池供电,因此系统可以在电源ups之间实时跟踪。这个“真实世界的时间”还可以根据您的位置(时区)和季节(夏令时)进行修改,或者表示为UTC的偏移量(也称为GMT或祖鲁时间)。

其次是相对时间,它是由时间返回的。perf_counter time.process_time。这种类型的时间与实际时间没有定义关系,因为这种关系是特定于系统和实现的。它只能用于度量时间间隔,即与两个瞬间之间所经过的时间成比例的无单元值。这主要用于评估相对性能(例如,这个版本的代码是否运行得比那个版本的代码快)。

在现代系统中,它是用一个CPU计数器来测量的,该计数器以与CPU硬件时钟相关的频率单调递增。计数器分辨率高度依赖于系统的硬件,在大多数情况下,该值不能可靠地与实际时间相关,甚至不能在系统之间进行比较。此外,计数器值将在每次CPU启动或重置时重置。

时间。perf_counter返回计数器的绝对值。时间。process_time是一个价值来源于CPU计数器,但只有当给定流程更新在CPU上运行,可以分为用户时间,过程本身就是时间在CPU上运行,和“系统时间”,这是操作系统内核上运行时上的CPU代表过程。

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
1

发表评论