在Linux上的Socket性能【JAVA教程】

!
也想出现在这里? 联系我们
信息

在Linux上的Socket性能,第1张

概述在Linux上的Socket性能

继我最后一个问题之后,

使用与对象stream的套接字的性能问题

我正在研究linux上的套接字性能。 通过上面的例子,我得到了〜65μsec的往返时间。 如果我在文件系统上制作两个fifos,则会下降到〜45μsec。 使用localhost套接字的额外时间必须是因为我正在打networking堆栈。

是否有一些 *** 作系统configuration,可以使本地主机套接字像命名pipe道一样快?

当客户端套接字被服务器closures,然后由同一端口上的客户端打开新套接字时,出现JVM_Bind错误

在c ++中无阻塞套接字写入性能

Stream Socket Server在linux中不能处理超过382个线程(每个连接一个)

为什么connect()会给EADDRNOTAVAIL?

如何获得linux中使用C的开放套接字列表?

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

提前致谢!

SOCK_SEQPACKET正在caching〜42k的数据,如何将其限制到更less?

CryptopP:如何使用SocketSource和SocketSink

如何testingNginx代理超时

不稳定的tcp接收次数

在windows上的Python 3.6中的原始套接字数据包嗅探器

通过上面的例子,我得到了〜65μsec的往返时间。 如果我在文件系统上制作两个fifos,则会下降到〜45μsec。 使用localhost套接字的额外时间必须是因为我正在打网络堆栈。

是的,这是可以预料的。

FIFO是比较原始的沟通方式。 他们的状态本质上是一个布尔变量。 读写 *** 作通过固定大小的相同的预分配缓冲区。 因此, *** 作系统可以并且确实优化 *** 作。

套接字更复杂。 他们有完整的TCP状态机。 缓冲动态双向(recv,send分别缓冲)。 这意味着当你写入本地套接字的东西,你几乎总是有一些涉及动态内存管理。 linux试图尽可能地避免这种情况:零拷贝/单拷贝技巧被实现在所有地方。 不过显然,由于这些电话需要经过更多的代码,因此速度会更慢。

最后,考虑到与FIFO相比有多少套接字,20us的差异坦率地说是一个关于linux套接字性能如何的声明。

PS 65us rtt =〜35us在一个方向。 1s / 35us =每秒〜30K包。 对于没有优化的网络代码,使用听起来正确的单一连接。

我不能帮助你在Java方面,但你可以看看UNIX域套接字。 以下是讨论如何在Java中使用它们的问题:

用于Java的UNIX套接字实现?

你之前的问题有两个错误的假设:

ICMP_ECHO(aka Ping)产生有意义的时间信息。 除此之外,ICMP层不可能(也应该是)处于低服务优先级。

通过很多Java接口来封送数据不是瓶颈。 因为它是。

您的测试方法是非常可疑的。 你想达到什么目的?

总结

以上是内存溢出为你收集整理的在Linux上的Socket性能全部内容,希望文章能够帮你解决在Linux上的Socket性能所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

© 版权声明
THE END
喜欢就支持一下吧
点赞145 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容