java – Linux上的套接字性能
继我上一期的问题之后: Performance issue using Javas Object streams with Sockets 我正在研究Linux上的套接字性能.通过上面的例子,我的往返时间约为65μsec.如果我在文件系统上制作两个fifo,则会下降到~45μsec.使用localhost套接字的额外时间必须是因为我正在访问网络堆栈. 是否有一些操作系统配置可以使localhost套接字与命名管道一样快?
提前致谢! 最佳答案
是的,这是可以预料的. FIFO是相当原始的通信方法.他们的状态基本上是一个bool变量.读取和写入通过固定大小的相同预分配缓冲区.因此,OS可以并且确实优化了操作. 套接字更复杂.他们拥有完整的TCP状态机.缓冲是动态和双向的(recv,send是单独缓冲的).这意味着当您将内容写入本地套接字时,您几乎总是涉及某种动态内存管理. Linux试图尽可能地避免这种情况:在整个地方实施零拷贝/单拷贝技巧.然而很明显,因为调用必须通过更多代码,所以它们会更慢. 最后,考虑到将多少套接字与FIFO进行比较,20us的区别在于坦率地讲述了Linux的套接字性能有多好. 附: 65us rtt =?35us朝一个方向. 1s / 35us =每秒30K包.对于没有使用单一连接进行优化的网络代码,听起来不错. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |