2017-03-14 16 views
1

我正在使用輪詢機制來管理多達100個連接。 poll()調用的超時值應該是什麼或者如何確定它的標準做法是否有任何標準做法。將套接字輪詢/選擇設置爲超時值的最佳做法是什麼?

我的情況的詳細信息 -

我有一個調度線程監聽所有的連接。一旦連接變爲準備就緒狀態,我將其禁用以進行輪詢並將連接轉發給線程池處理讀取。調度程序線程返回到輪詢。

線程池消耗connfd上的讀取並將其返回給調度程序,以便下一次將其添加到輪詢中。但是,調度程序在poll()調用返回之前將無法添加輪詢。我需要調度員定期檢查是否需要重新啓用任何連接的輪詢。

什麼是一個很好的超時值,以便調度程序線程可以定期停止輪詢和更新其pollfd列表。

回答

0

您不需要使用超時(只需將其設置爲INF)。

當需要顯式定時器操作(一些異步IO庫爲您處理)時,基本上會使用超時。

要喚醒處於輪詢狀態的線程,請使用self-pipe trick。在Linux上,eventfd也可以使用。

使用timerfd(僅Linux),超時可以完全廢棄。

相關問題