加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Linux上的套接字性能

发布时间:2020-12-14 19:11:50 所属栏目:Java 来源:网络整理
导读:继我上一期的问题之后: Performance issue using Javas Object streams with Sockets 我正在研究Linux上的套接字性能.通过上面的例子,我的往返时间约为65μsec.如果我在文件系统上制作两个fifo,则会下降到~45μsec.使用localhost套接字的额外时间必须是因为

继我上一期的问题之后:

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

提前致谢!

最佳答案

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包.对于没有使用单一连接进行优化的网络代码,听起来不错.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读