【发布时间】:2012-12-19 06:57:19
【问题描述】:
阻塞和非阻塞 Winsock TCP 套接字在速度或性能上是否存在差异? 我可以得到这两种插座的差异,但两种类型之间没有详细的性能比较。
【问题讨论】:
-
如果有的话,我会将这个问题标记为 C 而不是 C++。
标签: performance sockets tcp winsock
阻塞和非阻塞 Winsock TCP 套接字在速度或性能上是否存在差异? 我可以得到这两种插座的差异,但两种类型之间没有详细的性能比较。
【问题讨论】:
标签: performance sockets tcp winsock
因为它与速度无关。 write 和 read 操作只是变相的内存复制。他们所做的只是分别将数据复制到内核和从内核复制数据。 IE。 他们实际上并不发送或接收任何东西。
阻塞 vs 非阻塞特性问:你喜欢这些操作阻塞直到完成还是返回 -1 和 EAGAIN 以防它们不能立即执行?例如,您从套接字读取,但接收缓冲区中没有任何内容。你更喜欢让recv 挂起直到有事情发生,还是返回-1 EAGAIN?
【讨论】:
根据我的经验,非阻塞 winsock 操作速度稍慢,但可扩展性更高。事实上,当您执行非阻塞 I/O(使用 IOCP)时,您需要进行两次系统调用和一些应用程序级别的调度,如果使用阻塞 I/O,则需要进行一次系统调用。如果您有许多并发连接,非阻塞 I/O 会更快,因为如果实施得当,架构可扩展性更高。
如果您需要以最大带宽从点到点传输数据,请使用阻塞 I/O。如果您需要处理许多并发客户端连接 - 使用非阻塞 I/O。不要对他们中的任何一个期望过高。
一般来说,这更多是关于“事件驱动与线程”的服务器架构,然后是“阻塞与非阻塞”。没有可以在任何情况下使用的通用服务器架构。这取决于应用程序。
【讨论】: