7

阻塞和非阻塞 Winsock TCP 套接字在速度或性能上是否存在差异?我可以得到两种插座的差异,但两种类型之间没有详细的性能比较。

4

2 回答 2

8

因为它与速度无关。这些操作只是变相write内存复制。他们所做的只是分别将数据复制到内核和从内核复制数据。即他们实际上并没有发送或接收任何东西read

阻塞 vs 非阻塞特性问:你更喜欢这些操作阻塞直到完成还是返回 -1EAGAIN以防它们不能立即执行?例如,您从套接字读取,但接收缓冲区中没有任何内容。您更喜欢recv挂起直到有事情发生还是返回 -1 EAGAIN

于 2012-12-19T07:00:52.200 回答
7

以我的经验,非阻塞 winsock 操作稍慢但更具可扩展性。事实上,当您执行非阻塞 I/O(使用 IOCP)时,您需要进行两次系统调用和一些应用程序级别的调度,如果使用阻塞 I/O,则需要进行一次系统调用。如果您有许多并发连接,则非阻塞 I/O 会更快,因为如果实施得当,架构可扩展性更高。

如果您需要以最大带宽从点到点传输数据 - 使用阻塞 I/O。如果您需要处理许多并发客户端连接 - 使用非阻塞 I/O。不要对他们中的任何一个抱有太多期望。

一般来说,这更多是关于“事件驱动与线程”服务器架构,然后是“阻塞与非阻塞”。没有可以在任何情况下使用的通用服务器架构。这取决于应用程序。

于 2012-12-19T07:09:15.410 回答