我有一台服务器,每个请求需要传输大量数据(~2~gig)。每次调用发送应该具有的建议数据量是多少?这有关系吗?
答案 0 :(得分:1)
TCP / IP堆栈负责不发送大于PATH MTU的数据包,并且你必须努力工作才能使它发送比MTU更小的更小的数据包,其方式不会帮助吞吐量:并且没有办法对任何给定连接的路径PTU实际上是什么。因此,请考虑MTU的所有考虑因素。
您可以而且应该尽可能地使每个send()
。
答案 1 :(得分:0)
您的数据包大小受协议的最大传输单位(MTU)限制。如果您发送的数据包大于MTU,则会出现数据包碎片。
你可以做一些数学运算:http://www.speedguide.net/articles/mtu-what-difference-does-it-make--111 更多参考文献:http://en.wikipedia.org/wiki/Maximum_transmission_unit
但最终我的建议是,如果你的目标是足够好,只是让os网络层完成它的工作,除非你编写原始套接字或传递一些时髦的选项,很常见的是os将有一个网络缓冲区和我会努力做到最好。
考虑到最后一个选项,socket.send()只不过是从用户进程内存到内核私有内存的内存传输。经验法则是不超过通常为4KB的虚拟内存页面大小http://en.wikipedia.org/wiki/Page_(computer_memory。