簡體   English   中英

非阻塞呼叫的睡眠

[英]sleep of non-blocking calls

我正在尋找最佳睡眠值以從非阻塞套接字接收數據。 例如:

while True:
    data=s.recv(1024)
    if not data:
        time.sleep(10) #10ms
    else:
        pass #...

沒有睡眠會導致100%的CPU使用率,那么有什么想法如何獲得最佳的CPU使用率和帶寬呢? 睡眠多長時間,CPU才能進行線程切換?

順便說一句,通過SO_SNDBUF / SO_RECVBUF設置套接字的緩沖區並設置TCP_NODELAY是否有意義?還是不應該將它們組合在一起?

如果您打算使用sleep() ,為什么不使用阻塞套接字呢?

你不應該自己做。 如果您需要代碼如此頻繁地喚醒,即使沒有收到數據,也可以使用select調用,並設置超時。

順便說一句,TCP_NODELAY是發送方,不會影響您的read

使用select 當套接字上有可用數據時,它將基本上暫停程序並喚醒它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM