当前位置: 首页 > 面试题库 >

了解time.perf_counter()和time.process_time()

黄伟
2023-03-14
问题内容

我对新功能time.perf_counter()和有一些疑问time.process_time()

对于前者,从文档中:

返回性能计数器的值(以小数秒为单位),即 具有最高可用分辨率的时钟,
可测量较短的持续时间。它确实包括整个系统的睡眠时间。返回值的参考点是不确定的,因此仅连续调用的结果之间的差有效。

所有系统的“最高分辨率”是否相同?还是总是稍微依赖于例如我们使用的是Linux还是Windows?
问题来自这样一个事实:阅读文档time.time()说明:“并非所有系统都提供比1秒更好的时间精度”,那么现在如何提供更好和更高的分辨率呢?

关于后者,time.process_time()

返回当前进程的系统和用户CPU时间之和的值(以秒为单位)。
它不包括睡眠期间经过的时间。根据定义,它是整个过程的。返回值的参考点是不确定的,因此仅连续调用的结果之间的差有效。

我不明白,这些“系统时间”和“用户CPU时间”是什么?有什么不同?


问题答案:

在这种情况下,“时间”有两种不同的类型:绝对时间和相对时间。

绝对时间是“现实世界的时间”,它是由time.time()我们返回并用来处理的。通常从过去的固定时间点(例如,1970年1月1日的UTC的UNIX时期00:00:00
UTC)测量,分辨率至少为1秒。现代系统通常提供毫秒或微秒的分辨率。它由大多数计算机上的专用硬件维护,RTC(实时时钟)电路通常由电池供电,因此系统可以跟踪两次加电之间的实时时间。该“实际时间”还会根据您所在的位置(时区)和季节(夏令时)进行修改,或表示为与UTC的时差(也称为GMT或Zulu时间)。

其次,存在相对时间,由time.perf_counter和返回time.process_time。从某种意义上说,这种时间与系统和实现有关,这种时间与实际时间没有定义的关系。它只能用于测量时间间隔,即与两个瞬间之间经过的时间成比例的无单位值。这主要用于评估相对性能(例如,此版本的代码是否比该版本的代码运行得更快)。

在现代系统中,使用CPU计数器进行测量,该计数器以与CPU硬件时钟相关的频率单调增加。计数器分辨率在很大程度上取决于系统的硬件,在大多数情况下,该值无法可靠地与实际时间相关,甚至无法在系统之间进行比较。此外,每次CPU上电或复位时,计数器值都会复位。

time.perf_counter返回计数器的绝对值。time.process_time是从CPU计数器派生的值,但仅当给定进程在CPU上运行时才更新,并且可以细分为“用户时间”(即进程本身在CPU上运行的时间)和“系统”时间”,这是操作系统内核代表进程在CPU上运行的时间。



 类似资料:
  • 问题内容: 我想使用API使用XPATH在父节点内定位一个节点。我以为这会让我回到父母那边。但是,它将返回我在整个DOM树中找到的第一个。我使用了错误的XPATH吗? 我也曾尝试使用XPATH,但这确实会返回任何东西。 谢谢。 更新: 给定下面的HTML,我想为子标题和子日期定义一个定位器,并使用WebElement.findElement()API对其进行定位,而不管父级是“ // a / li

  • 我正试图把我的头围绕在所有不同的日志记录工具(log4j、slf4j、logback、jcl等)和它们都做的事情上。 我知道slf4j是不同日志记录工具的一个门面,它使任何日志记录工具之间的切换变得很容易。但到了日志的话题,我就一头雾水了。我知道logback是log4j的后继者,在这篇文章中,它使用了“natively implements”这个词;那到底是什么意思。从我的理解是,日志与SLF4

  • 问题内容: 我正在尝试了解react-redux的connect方法及其作为参数的功能。特别是。 以我的理解,它的返回值将是一个从状态派生的对象(因为它存在于商店中),其键将作为道具传递给目标组件(应用了connect的组件)。 这意味着目标组件所消耗的状态与存储在商店中的状态可能具有截然不同的结构。 问:可以吗? 问:这是预期的吗? 问:这是反模式吗? 问题答案: 问: 答:是的 问: 是的,这

  • 有人能使用下面的示例数据解释JavaScript Truthy和Falsy吗?我读过其他线程,但仍然感到困惑。 根据我的理解,我认为var a=1 是唯一的真理,其余的都是虚假的-这是正确的吗?

  • Kotlin自动生成它的getters和settings,但是我从来没有引用过它们?另外,用Kotlin编写自定义getter/setter的正确方法是什么?当我说< code>myObj.myVar = 99时,我感觉< code>myVar是我正在直接访问的< code>myObj的公共字段。这里到底发生了什么?

  • 问题内容: 有一个结构。我想以这种方式链接这三个实体:公司应包含ID,公司名称和部门列表,每个部门都有一个工人列表,ID和部门名称。每个工人都有名字,身份证。 我试图与一对多和多对一建立联系,但未成功。 公司 部 工人 我从开始: 它填充公司,但不填充其他表,也没有创建任何联接(映射)错误: 问题答案: 除了Glenn Lane的答案中提到的级联,您还需要了解双向关联是如何工作的。 它们有一个所有