我有一个小的Web服务器应用程序,它从文件流中读取X
个字节,然后将这些字节输出到一个开放的TCP流。
我玩了一下它,例如,缓冲区大小为1024,然后将其提升到5120并没有看到太大的改善。我也试过制作它的大小为1,我看到速度大幅下降。
我知道我将受到媒体读取速度以及网络的限制,所以我很想知道如何设置这个数字。是否有一定数量可以设置为最适合所有情况的数字?
答案 0 :(得分:2)
是否有一定数量我可以将其设置为在所有情况下都是最佳的?
不,因为它取决于您提到的因素,以及I / O库和操作系统中的缓冲。使用一些值是磁盘块大小,内存页面大小和/或网络数据包大小的倍数(不要忘记协议头!)通常是明智之举。
如果速度至关重要,那么如果可以避免,请不要通过内存复制块。例如,Linux对此进行sendfile
系统调用。
答案 1 :(得分:0)
没有一定数量。但是,使用不同的缓冲区维度运行大量测试,并且可能使用网络仿真工具来模拟不同的网络条件,可以帮助选择不同的合适缓冲区维度。我在优化VoIP客户端时这样玩,这对我帮助很大。
答案 2 :(得分:0)
更重要的因素是套接字发送缓冲区大小。将此设置为至少32k。