socket本身有一个send函数,这个函数的只能一次发送一个缓冲区,这对于在发送大量数据的时候或者数据包很多的时候就可能导致可能导致系统的低性能,主要原因在于调用太多次的send函数,导致从用户态到核心态的不断切换,而耗费了当前的CPU时钟周期。
那么解决办法就是减少调用send的次数,一种办法就是使用一个大一点的BUFFER,在发送数据的时候将多个数据包的内容COPY到这个BUFFER中,然后一次发送,这样在一定程度上减少了send的调用次数,但需要一定的编码工作。
Windows平台上有一个WSASend函数,可以支持一次发送多个BUFFER的请求,每个被发送的数据被填充到WSABUF结构中,然后传递给WSASend函数同时提供BUF的数量,这样WSASend就能上面的工作而减少send的调用次数,来提高了性能。
实际检验证明,使用WSASend可以提高50%的性能甚至更多。

socket的send函数一次只能发送一个缓冲区,大量数据或多数据包时会因频繁调用导致系统性能降低。解决办法一是用大BUFFER合并数据后一次发送,二是在Windows平台使用WSASend函数,可一次发送多个BUFFER,经检验能提高50%甚至更多性能。
1万+

被折叠的 条评论
为什么被折叠?



