2010-10-29 52 views
-1

我剛剛閱讀Marc Rochkind的第二版「高級Unix編程」中有關poll()函數的部分。在本節中,作者提到在Darwin 6.6下不支持poll(),並且我看到互聯網上的其他項目表明使用select()系統調用在OSX上模擬poll()。我想爲我正在使用的類專門使用poll(),因爲它可能服務於大量的套接字,我擔心超過select()可以使用的文件句柄的數量限制。如果我讀過的語句是真的,那麼select()還有一個合適的替代方法,還是有辦法克服FD_SETSIZE限制嗎?OSX是否支持poll()?

回答

2

poll(2)在10.3中的select(2)上作爲一個層被引入,並且在10.4中得到了本地實現。

在過去的幾年裏,大多數基於BSD的系統都實現了poll()。如果你從poll()(select())得到實際的好處,我建議使用它。即使在仍然通過select()模擬poll()的系統上,最糟糕的情況是,您的性能將會是select()和邊際懲罰。

如果您處於select()的可伸縮性決不會被接受的情況,那麼BSD派生系統往往會有一個非常調整的kqueue(2)

+0

根據http://marc.info/?l=log&m=111515776629581&w=2,在10.4中執行poll()時出現了問題,這爲任何想要使用DJB的守護進程的人創建了問題。我不知道這是否得到修復。 – Peter 2012-12-25 02:47:42