在互联网上,我看到了几个处理服务的例子,它等待来自客户的无限循环消息,包括短暂的睡眠。例如:
while True:
check_messages_stack()
sleep(0.1)
那里的睡眠有什么意义?它应该节省资源吗?如果它确实节省了一些资源,它会是一个有意义的数量吗?
答案 0 :(得分:1)
sleep
就像其他人所说的那样放松了CPU使用率,但另外如果它类似于访问网络/网络数据,则需要睡眠以防止主机服务器崩溃并禁止你。
答案 1 :(得分:1)
当您的PC运行时,您的CPU需要执行大量过程(以使您的PC运行)。 由于CPU速度非常快,他们可以假装同时执行多项任务,但他们并没有真正做到(现在我们得到了多核CPU和多线程,但是忘掉了这个解释)。 他们只是在一定时间内执行某个流程的某个部分,然后其他流程的一部分返回到第一个流程,依此类推。
以一种简单的方式,当CPU正在运行时,允许切换到一个进程到另一个进程,例如当进程执行某些I / O或等待用户交互时。
执行while true
时,它将完成循环,完成后执行while
循环中的函数。这里ASAP真的意味着ASAP,所以没有其他过程能够在两个循环之间做任何事情。因为CPU正在不断处理。
当您放置sleep
时,您允许CPU让其他进程执行。由于随机CPU可以在一微秒内完成数十亿次操作,因此没有真正的睡眠时间。
所以在你的问题中,sleep(0.1)
允许你的CPU在两次check_messages_stack()
调用之间执行somme bilions操作。
有关详细信息,请查找" CPU Scheduling"。
答案 2 :(得分:0)
sleep
不使用CPU资源,但是不断执行check_messages_stack()
可能(取决于你所拥有的),所以如果你不需要经常执行它,那么给CPU带来是个好习惯休息一段时间。
答案 3 :(得分:0)
如果函数没有等待任何东西,它将消耗100%的CPU,通过添加该睡眠,它给CPU一些时间来执行其他进程