在互聯網上,我看到了幾個處理服務的例子,這些例子在無休止地等待來自客戶端的消息,包括短暫的睡眠。例如:在真正的循環中添加短暫睡眠的意義何在?
while True:
check_messages_stack()
sleep(0.1)
那裏的睡眠有什麼意義?它應該節省資源嗎?如果它確實節省了一些資源,它會是一個有意義的數量?
在互聯網上,我看到了幾個處理服務的例子,這些例子在無休止地等待來自客戶端的消息,包括短暫的睡眠。例如:在真正的循環中添加短暫睡眠的意義何在?
while True:
check_messages_stack()
sleep(0.1)
那裏的睡眠有什麼意義?它應該節省資源嗎?如果它確實節省了一些資源,它會是一個有意義的數量?
sleep
不使用CPU資源,但不斷執行check_messages_stack()
可能(取決於你在那裏),所以如果你不需要經常這樣做,給CPU一些時間是一個好習慣。
如果函數不等待任何東西,它會消耗100%的CPU,通過增加睡眠,它給CPU一段時間來執行其他進程
sleep
的其他人說,像放鬆CPU使用率,但除此之外,如果要訪問網絡/網絡數據,則需要進行睡眠以防止主機服務器崩潰並禁止您。
當您的電腦運行時,您的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調度」。
沒有上下文和具體問題,問題並沒有真正意義。 – pvg
更少的CPU週期。運行while循環'while True:pass'和'while True:pass; sleep(.1)',你會發現你的CPU使用率有所不同 –