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

Ana*_*iam 7 sockets performance tcp winsock

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

cni*_*tar 7

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

阻塞与非阻塞功能要求:您是否希望阻止这些操作直到完成或返回-1,EAGAIN以防它们无法立即执行?例如,您从套接字读取但接收缓冲区中没有任何内容.你喜欢recv悬挂直到有什么东西出现或者返回-1 EAGAIN吗?


Evg*_*zin 7

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

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

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