概述在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性能所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
请登录后查看评论内容