2010-10-29 50 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