我是否需要轮询非阻塞套接字以获得更好的性能?

时间:2011-10-29 00:23:12

标签: sockets asynchronous nonblocking recv

我有一个非阻塞套接字列表。

我可以在每个中调用recv(在这种情况下,某些调用会失败)或poll列表,然后在就绪套接字上调用recv

这些方法之间是否存在性能差异?

谢谢!

1 个答案:

答案 0 :(得分:1)

除非套接字上的数据速率非常高(例如:recv()将失败<25%的时间),使用poll()select()几乎总是更好选择。

现代操作系统将智能阻止poll()操作,直到该组中的一个fds准备就绪(内核将阻塞一组fds上的线程,仅在访问该fd时唤醒它...最终,这种情况发生得远远超过必要,导致一些忙碌的等待,但它总比没有好,而recv()循环总是会导致忙碌的等待。