java – Linux上的套接字性能

前端之家收集整理的这篇文章主要介绍了java – Linux上的套接字性能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

继我上一期的问题之后:

Performance issue using Javas Object streams with Sockets

我正在研究Linux上的套接性能.通过上面的例子,我的往返时间约为65μsec.如果我在文件系统上制作两个fifo,则会下降到~45μsec.使用localhost套接字的额外时间必须是因为我正在访问网络堆栈.

是否有一些操作系统配置可以使localhost套接字与命名管道一样快?

uname -a
Linux fiatpap1d 2.4.21-63.ELhugemem #1 SMP Wed Oct 28 23:12:58 EDT 2009 i686 athlon i386 GNU/Linux
@H_403_13@

提前致谢!

最佳答案

With the above example I get a round trip time of ~65μsec. If I make two fifos on the file system this goes down to ~45μsec. The extra time using localhost sockets must be because I’m hitting the network stack.

是的,这是可以预料的.

FIFO是相当原始的通信方法.他们的状态基本上是一个bool变量.读取和写入通过固定大小的相同预分配缓冲区.因此,OS可以并且确实优化了操作.

套接字更复杂.他们拥有完整的TCP状态机.缓冲是动态和双向的(recv,send是单独缓冲的).这意味着当您将内容写入本地套接字时,您几乎总是涉及某种动态内存管理. Linux试图尽可能地避免这种情况:在整个地方实施零拷贝/单拷贝技巧.然而很明显,因为调用必须通过更多代码,所以它们会更慢.

最后,考虑到将多少套接字与FIFO进行比较,20us的区别在于坦率地讲述了Linux的套接性能有多好.

附: 65us rtt =〜35us朝一个方向. 1s / 35us =每秒30K包.对于没有使用单一连接进行优化的网络代码,听起来不错.

猜你在找的Java相关文章