而循环性能取决于单独的过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了而循环性能取决于单独的过程相关的知识,希望对你有一定的参考价值。

我已经注意到某些奇怪的行为,它可能会或可能不会特定于我的系统。 (联想t430运行Windows 8)

使用此脚本:

import time

now = time.time()
while True:
    then = now
    now = time.time()
    dif = now - then
    print(dif)
    time.sleep(0.01)

打开浏览器后,我得到以下输出(我认为是名义上的)。

enter image description here

但是,如果没有打开浏览器,我会发现每个循环的等待时间很长。

enter image description here

显然这是违反直觉的,因为我认为当您的并发过程较少时,任何人都希望性能更好。

对这些结果的任何见解或简单复制,将不胜感激。

编辑:有趣的是,我在这段代码中观察到了类似的延迟:

import time

now = time.time()

def newSleep(mark,duration):
    count = 0
    while time.time()-mark < duration:
        count+=1
    print(count)


while True:
    then = now
    now = time.time()
    dif = now - then
    print(dif)
    #time.sleep(0.01)
    newSleep(now,0.01)

虽然它确实提供了更多的见解-这是潜在循环的某些情况是由于缺乏处理器可用性(通过打印计数0引起的)-我仍然注意到15ms的行为,其中打印计数将高达70k ...以及10ms的行为,计数约为40k。

答案

我在Windows和ubuntu server(virtualbox)(没有浏览器)中都尝试过相同的方法,但是结果是相同的,平均而言,我得到的结果是这样的>]

在Ubuntu服务器中

    0.010122537612915039
    0.010426998138427734
    0.010067939758300781
    0.010767221450805664
    0.010728120803833008
    0.010106086730957031
    0.01068258285522461
    0.010105609893798828
    0.01118612289428711
    0.010136842727661133
    0.010585784912109375
    0.010425567626953125
    0.01014852523803711
    0.010422945022583008
    0.01010894775390625

和在Windows中

    0.010767221450805664
    0.010751485824584961
    0.010716915130615234
    0.010229110717773438
    0.01016545295715332
    0.010195255279541016
    0.010723352432250977
    0.010744094848632812
    0.010716438293457031
    0.010564565658569336
    0.010889291763305664
    0.010728597640991211
    0.010579824447631836
    0.010889530181884766
    0.010567903518676758
    0.010717153549194336
    0.010735273361206055

所以,我认为打开的浏览器与python的性能之间没有关联

另一答案

对这些结果的任何见解或简单复制,将不胜感激。

另一答案

虽然我无法在计算机上重现此行为,但我怀疑它可能是由动态处理器时钟(以及内存和系统总线时钟)引起的,例如当您没有打开浏览器时,处理器以最大时钟的1/2运行,但是一旦启动浏览器,它将达到最大时钟。您可以通过在Advanced Power Options(高级电源选项)中使用“ Maximum minimum Processor state / frequency(最大处理器状态频率)”或运行另一个会产生许多进程的应用程序(这是Chrome所做的)而不是浏览器来运行,并查看此操作是否改变了延迟,来验证这一点。

另一答案

我额外启动Windows 7以复制您的发现,我可以确认。

以上是关于而循环性能取决于单独的过程的主要内容,如果未能解决你的问题,请参考以下文章

支持动态或静态片段的不同屏幕尺寸?

使用While循环导出Excel

JS性能优化

time.sleep(..)的准确性会更改并影响循环性能,具体取决于是否正在运行其他进程

JAVA高性能高并发解决思路

java,时间单独的if语句和循环而不是带有探查器的方法