我正在编写一个网络库(阻塞套接字),用于将多个解压缩的图像(最大4096x4096x4 = ~67MB)从中央图像服务器传输到3d程序的一个或多个实例,这些实例将这些用作纹理。主要方案仅限localhost。由于数据可能变得非常大,我当然对最佳网络速度感兴趣,特别是在localhost上。
我已经使用SIO_LOOPBACK_FAST_PATH localhost optimization,这会提高速度。
我编写了一个单线程/单套接字速度测试客户端+服务器,它通过localhost发送100 GiB,并对其进行了优化,直到我对send()
和recv()
进行了约96%的处理。< / p>
这个节目告诉我:
到目前为止一切顺利,现在有趣的是:
如果我启动每个客户端+服务器的5个实例,每个实例的速度会降低一点,但总体来说它会高得多:
所以现在我问问自己是什么导致了这一点。我认为我可以排除自己的测试程序的处理,因为服务器和客户端在send()
和recv()
中保持96%。所以只有套接字传输本身就是原因。
Windows中的套接字实现本身是单线程的吗?非阻塞/重叠套接字是否会提高send()
和recv()
的速度?或者更可取的做法是将数据分成多个线程,块和每个连接的多个套接字?或者还有其他我没有想到的优化选项吗?