阻塞与非阻塞winsock的速度/性能特征

时间:2012-12-19 06:57:19

标签: performance sockets tcp winsock

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

2 个答案:

答案 0 :(得分:7)

因为它与速度无关。操作writeread只是伪装内存复制。他们所做的只是分别与内核复制数据。即他们实际上并不发送或接收任何内容

阻塞与非阻塞功能会问:您是否希望阻止这些操作直到完成或返回-1和EAGAIN以防它们无法立即执行?例如,您从套接字读取但接收缓冲区中没有任何内容。您是否希望recv挂起,直到出现问题或返回-1 EAGAIN

答案 1 :(得分:7)

根据我的经验,非阻塞的winsock操作稍慢但可扩展性更强。事实是,当您执行非阻塞I / O(使用IOCP)时,您需要在应用程序级别进行两次系统调用以及一些调度,如果使用阻塞I / O,则需要进行一次系统调用。如果你有很多并发连接,非阻塞I / O要快得多,因为如果实现得好,可以实现更高的可扩展性。

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

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