刷新传输到网络套接字的OutputStreamWriter有什么副作用。
我有一个程序在每几个字节后调用out.flush()
。有什么理由让我等到我需要的所有字节都在缓冲区中?
如果我冲洗太多(更多的开销),我会降低传输速率吗?
这会减慢我的程序执行速度(阻塞)吗?
答案 0 :(得分:1)
每次写入套接字时,都会添加5到15微秒。对于缓冲输出,当您刷新()数据时会发生这种情况。注意:如果你没有缓冲输出,它将在每次write()时执行,flush()将不会执行任何操作。
幸运的是,操作系统希望应用程序能够进行比最佳调用更多的调用,因此它默认使用Nagle算法将数据部分写入更大的数据包。注意:操作系统不仅可以执行此操作,而且某些网络适配器也会默认执行此操作。
简而言之,不要经常冲洗(),除非数十秒微秒加起来对你很重要,否则你可能不会注意到差异。例如如果你进行100次冲洗,你可能会增加一毫秒。
答案 1 :(得分:1)
没有理由冲洗,除非:
在其他情况下,最好允许缓冲区,Nagle算法和TCP接收窗口发挥作用。
答案 2 :(得分:0)
如果在网络上进行数据传输,则outputStreamWriter的flush的批处理确实可以提高性能。 我观察到大约520字节的单个数据包刷新大约需要3毫秒。