2016-06-12 44 views
0

在互联网上,我看到了几个处理服务的例子,这些例子在无休止地等待来自客户端的消息,包括短暂的睡眠。例如:在真正的循环中添加短暂睡眠的意义何在?

while True: 
    check_messages_stack() 
    sleep(0.1) 

那里的睡眠有什么意义?它应该节省资源吗?如果它确实节省了一些资源,它会是一个有意义的数量?

+0

没有上下文和具体问题,问题并没有真正意义。 – pvg

+1

更少的CPU周期。运行while循环'while True:pass'和'while True:pass; sleep(.1)',你会发现你的CPU使用率有所不同 –

回答

0

sleep不使用CPU资源,但不断执行check_messages_stack()可能(取决于你在那里),所以如果你不需要经常这样做,给CPU一些时间是一个好习惯。

0

如果函数不等待任何东西,它会消耗100%的CPU,通过增加睡眠,它给CPU一段时间来执行其他进程

1

sleep的其他人说,像放松CPU使用率,但除此之外,如果要访问网络/网络数据,则需要进行睡眠以防止主机服务器崩溃并禁止您。

1

当您的电脑运行时,您的CPU需要执行很多过程(以使您的电脑运行)。由于CPU速度非常快,他们可以假冒同时完成多项任务,但实际上并非如此(现在我们获得了多核CPU和多线程处理,但对于此解释却忘记了这一点)。
他们只是在一段时间内执行某个进程的某个部分,然后其他进程的一部分返回到第一个进程,等等。

通过一种简单的方法,CPU可以切换到一个进程到另一个进程,而不会被实际运行的进程使用,例如当进程执行一些I/O或等待用户交互时。

当您执行while true时,它将尽快循环以执行while循环中的功能。这里ASAP真的意味着ASAP,所以没有其他进程能够在两个循环之间做任何事情。因为CPU正在不断处理。

当您放入sleep时,您允许CPU让其他进程执行。由于随机CPU可以在数微秒内完成数十亿次操作,因此睡眠时间并不算多。

所以在你的问题中,sleep(0.1)允许你的CPU执行两个check_messages_stack()调用之间的somme bilions操作。

有关更多信息,请查找“CPU调度”。