Linux 本地网络程序如何通信方式?

2018-04-26 15:27:23 +08:00
 duanhui8
在 linux 服务端部署一个 ActiveMQ 消息队列,使用 c++服务端的程序,将消息压入消息队列中使用( createCMSConnectionFactory( "tcp://192.168.10.11:61616" ) ))
请教大神,这种方式数据流,是走的网卡?还是 socket 文件?还是内存?
3344 次点击
所在节点    程序员
20 条回复
duanhui8
2018-04-26 15:47:49 +08:00
求高手解答
Renylai
2018-04-26 15:56:51 +08:00
不熟悉 activeMQ 做法,小菜鸟我觉得这个写法走的网卡 TCP,如果是定义了管道文件.sock 走的是管道,内存的话就更不是这么写的了
duanhui8
2018-04-26 16:12:52 +08:00
毕竟是本地通信,有没有可能被转换为共享内存的方式,传输?
duanhui8
2018-04-26 16:14:38 +08:00
有高手能给个肯定的答案吗
pagict
2018-04-26 16:15:26 +08:00
如果是写 192.168.10.11 的话,还是会走网卡的吧
如果写 localhost 或者 127.0.0.1,目测就直接内存了
tempdban
2018-04-26 16:23:03 +08:00
都不走网卡直接环回
duanhui8
2018-04-26 16:30:46 +08:00
@tempdban 老哥 厉害了,这种方式通信性能如何?
tempdban
2018-04-26 16:38:35 +08:00
@duanhui8 这块的性能暂时不是你需要考虑的点。
duanhui8
2018-04-26 16:40:27 +08:00
@tempdban 感谢
htfy96
2018-04-26 16:54:29 +08:00
Linux 本机回环有 fast path,虽然比 domain socket/pipe 还是慢一些(延时在 2x 左右,吞吐在 3x 左右),但不到万不得已不要考虑这些性能
duanhui8
2018-04-26 17:08:52 +08:00
@htfy96 谢谢。在做基础软件,高并发,高数据量,性能要求高,所以考虑性能多点。
既然没什么问题,先从其他方向优化了
tempdban
2018-04-26 17:50:57 +08:00
@duanhui8 去拿 vtune 跑一下,瓶颈全出来了
changnet
2018-04-26 18:07:21 +08:00
不懂 ActiveMQ,但是按照惯例,127.0.0.1 或者 localhost 才是走回环。你这个应该是走网卡。因为默认根据 ip 寻址你这个就是你网卡的地址。
duanhui8
2018-04-26 18:49:58 +08:00
@tempdban 好的,我去了解一下,谢谢
rrfeng
2018-04-26 18:53:42 +08:00
都是直接走 localhost 的。不管你填写哪个网卡的 IP 地址,这种包你甚至 tcpdump 抓不到,因为不会经过网卡的 buffer
tempdban
2018-04-26 19:07:25 +08:00
@rrfeng 你抓一下环回网卡 lo 有惊喜
htfy96
2018-04-26 19:09:46 +08:00
@changnet 在比较现代的内核上,包不会发给网卡驱动,查了 ARP 表之后是本机地址会直接走 fast path。可以开个 iperf,然后运行前后 ip addr -s 看一下 tx packets 的变化,就能发现走的还是 lo
flynaj
2018-04-26 21:07:34 +08:00
走网络啊,本机看路由表,可能走 lo,网络协议方便以后服务端分开,
kongkongyzt
2018-04-26 21:27:46 +08:00
今天遇到了类似的, 不过我的是 MySQL

localhost 的时候走的 unix domain socket.
127.0.0.1 的时候走的本地回环
192.168.0.103 (局域网中本机 ip) 的时候走的网卡

其实看一下你的路由表你就明白了, 不行你就 tcpdump 抓包看下就很显然了
duanhui8
2018-04-29 11:01:56 +08:00
@kongkongyzt 谢谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/450088

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX