首页 文章

文件读取的体积缓冲区大小,然后发送数据包

提问于
浏览
2

我有一个小的Web服务器应用程序从文件流中读取 X 个字节,然后将这些字节输出到打开的TCP流 .

我稍微玩了一下,例如,缓冲区大小为1024然后将其提升到5120并没有看到太大的改善 . 我也试过制作它的大小为1,我看到速度大幅下降 .

我知道我将受到媒体读取速度以及网络的限制,所以我很想知道如何设置这个数字 . 是否有一定数量我可以将其设置为在所有情况下都是最佳的?

3 回答

  • 2

    是否有一定数量我可以将其设置为在所有情况下都是最佳的?

    不,因为它取决于您提到的因素,以及I / O库和操作系统中的缓冲 . 但是,使用某个值是磁盘块大小,内存页大小和/或网络数据包大小的倍数(不要忘记协议头!)通常是明智之举 .

    如果速度是必要的,那么如果你可以避免它,就不要通过内存复制块 . 例如,Linux对此进行了sendfile系统调用 .

  • 0

    没有一定数量 . 但是,使用不同的缓冲区维度运行大量测试,并且可能使用网络仿真工具来模拟不同的网络条件,可以帮助选择不同的合适缓冲区维度 . 我在优化VoIP客户端时这样玩,这对我帮助很大 .

  • 0

    更重要的因素是套接字发送缓冲区大小 . 将此设置为至少32k .

相关问题