【发布时间】:2011-09-01 16:38:05
【问题描述】:
这种模式经常出现,但我找不到直接的答案。
一个非关键的、不友好的程序可能会这样做
while(True):
# do some work
使用其他技术和平台,如果你想让这个程序热运行(使用尽可能多的 CPU 周期)但要礼貌 - 允许其他热运行的程序有效地减慢我的速度,你会经常写:
while(True):
#do some work
time.sleep(0)
我已经阅读了关于后一种方法是否会在 python 上实现我希望在 linux 机器上运行的相互矛盾的信息。是否会导致上下文切换,导致我上面提到的行为?
编辑:值得一提的是,我们在 Apple OSX 中尝试了一个小实验(手边没有 linux 机器)。这个盒子有 4 个内核和超线程,所以我们只用了 8 个程序就创建了一个
while(True):
i += 1
正如预期的那样,活动监视器将 8 个进程中的每一个显示为消耗超过 95% 的 CPU(显然使用 4 个内核和超线程,您总共得到 800%)。然后我们启动了第九个这样的程序。现在所有 9 个都运行在 85% 左右。现在杀死第九个人并用
启动一个程序while(True):
i += 1
time.sleep(0)
我希望这个过程使用接近 0%,而其他 8 个将运行 95%。但相反,所有九个都运行在 85% 左右。所以在 Apple OSX 上, sleep(0) 似乎没有效果。
【问题讨论】:
-
我相信
time.sleep(0)有点像yield?
标签: python multithreading