0

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

我可以调用recv每一个(在这种情况下,一些调用会失败)或poll列表,然后调用recv准备好的套接字。

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

谢谢!

4

1 回答 1

1

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

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

于 2011-10-29T00:36:27.463 回答