我刚刚阅读了Marc Rochkind在“高级Unix编程”第二版中关于poll()函数的部分。在本节中,作者提到在Darwin 6.6下不支持poll(),我在互联网上看到其他项目表明使用select()系统调用在OSX上模拟poll()。我想使用poll()为我正在工作的类,因为它可能服务于大量的套接字,我担心超出select()可以使用的文件句柄数量的限制。如果我读过的语句都是真的,是否有一个合适的select()替代方法,还是有办法克服FD_SETSIZE限制?
答案 0 :(得分:2)
poll(2)作为10.3中select(2)的一个层引入,并在10.4中得到了一个原生实现。
过去几年,大多数现代基于BSD的系统都实施了poll()。如果你从poll()(与select()相比)获得实际好处,我建议你使用它。即使在仍然通过select()模拟poll()的系统上,最坏的情况也是select()的性能,并且会有边际惩罚。
如果您处于select()的可伸缩性永远不可接受的情况下,BSD派生的系统往往具有非常优化的kqueue(2)。