在实现低级HTTP和FTP传输时,如何选择缓冲区的大小(我从套接字读取或写入的字节数)以获得最大吞吐量?我的应用程序应该使用HTTP或FTP在130 Kbps到3 Mbps之间的连接上传输数据(我事先知道预期的速度).有时它是单向转移,有时它是双向转移.我应该坚持使用一些平均缓冲区大小,还是必须根据连接速度改变它?
谢谢.
选择超过8KB的缓冲区大小.9000通常是即使是最快的网络中使用的最大MTU(最大传输单元)大小.
当您使用大于连接MTU的缓冲区时,操作系统会根据需要将其分解为MTU大小的部分,因此您在MTU上使用的任何内容对网络性能影响不大.
但是,如果要传输文件,使用大缓冲区可能会对性能产生其他影响,那么使用大缓冲区可能会提高读取性能,从而提高应用程序的速度.
所以,通常选择一个像16KB这样的好轮数是个好主意.绝对不要低于1500,因为这会对网络性能产生负面影响(导致操作系统有时会发送小数据包,从而降低网络性能).
首先,进行一些测量.
然后,在进行可靠的性能测量后,更改缓冲区大小并绘制速度与缓冲区大小的关系图.
由于您事先知道连接速度,因此您应该能够使用不同的实际缓冲区大小来测量实际速度.
操作系统,协议栈和网络太复杂,无法从第一原理中得出答案.你需要在做任何事之前进行测量.