2016-06-12 46 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調度」。