我有一个非阻塞套接字列表。
我可以在每个中调用recv
(在这种情况下,某些调用会失败)或poll
列表,然后在就绪套接字上调用recv
。
这些方法之间是否存在性能差异?
谢谢!
答案 0 :(得分:1)
除非套接字上的数据速率非常高(例如:recv()
将失败<25%的时间),使用poll()
或select()
几乎总是更好选择。
现代操作系统将智能阻止poll()
操作,直到该组中的一个fds准备就绪(内核将阻塞一组fds上的线程,仅在访问该fd时唤醒它...最终,这种情况发生得远远超过必要,导致一些忙碌的等待,但它总比没有好,而recv()
循环总是会导致忙碌的等待。