而循环性能取决于单独的过程
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)
打开浏览器后,我得到以下输出(我认为是名义上的)。
但是,如果没有打开浏览器,我会发现每个循环的等待时间很长。
显然这是违反直觉的,因为我认为当您的并发过程较少时,任何人都希望性能更好。
对这些结果的任何见解或简单复制,将不胜感激。
编辑:有趣的是,我在这段代码中观察到了类似的延迟:
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以复制您的发现,我可以确认。
以上是关于而循环性能取决于单独的过程的主要内容,如果未能解决你的问题,请参考以下文章