如何在Windows下提高localhost套接字速度?

时间:2017-12-29 10:42:00

标签: c++ windows sockets localhost

我正在编写一个网络库(阻塞套接字),用于将多个解压缩的图像(最大4096x4096x4 = ~67MB)从中央图像服务器传输到3d程序的一个或多个实例,这些实例将这些用作纹理。主要方案仅限localhost。由于数据可能变得非常大,我当然对最佳网络速度感兴趣,特别是在localhost上。

我已经使用SIO_LOOPBACK_FAST_PATH localhost optimization,这会提高速度。

我编写了一个单线程/单套接字速度测试客户端+服务器,它通过localhost发送100 GiB,并对其进行了优化,直到我对send()recv()进行了约96%的处理。< / p>

这个节目告诉我:

  • ~4.6GiB / s用于非常大的块/缓冲区(1GiB)
  • ~3.5GiB / s适用于大块(100MiB)
  • ~1.6GiB / s适用于较小的块(10MiB)

到目前为止一切顺利,现在有趣的是:

如果我启动每个客户端+服务器的5个实例,每个实例的速度会降低一点,但总体来说它会高得多:

  • AVRG。对于1GiB块,~2.6GiB / s * 5 = 13GiB / s
  • AVRG。对于100MiB块,~1.8GiB / s * 5 = 9GiB / s
  • AVRG。对于10MiB块,~1.4GiB / s * 5 = 7GiB / s

所以现在我问问自己是什么导致了这一点。我认为我可以排除自己的测试程序的处理,因为服务器和客户端在send()recv()中保持96%。所以只有套接字传输本身就是原因。

Windows中的套接字实现本身是单线程的吗?非阻塞/重叠套接字是否会提高send()recv()的速度?或者更可取的做法是将数据分成多个线程,块和每个连接的多个套接字?或者还有其他我没有想到的优化选项吗?

0 个答案:

没有答案