当前位置:首页>Linux>Linux进程间通信方式

Linux进程间通信方式

  • 2026-09-08 23:38:58
Linux进程间通信方式
管道(Pipe)
分为匿名管道、命名管道。
匿名管道只适用于有亲缘关系进程(父子进程、兄弟进程),单向通信,数据读完就清空;
命名管道FIFO可以让互不相关的进程通信;
数据基于字节流,半双工。优点简单;缺点传输速度有限,只能单向。
socket
支持本机不同进程,也支持跨主机进程通信;
分为本地套接字(AF‑UNIX,本机进程间传输,性能高)和网络套接字;
采用客户端‑服务端模型,通用性最强;适合跨服务器数据交互。
消息队列
内核提供的队列,进程把数据封装成消息体发送到内核队列;
消息带有类型标识,进程可以按类型读取消息;
进程退出消息队列数据依旧存在;
缺点:内核有最大限制,不适合超大的数据传输。
信号量(Semaphore)
本质是计数器,主要用来做进程同步、互斥,不是用来传输大量数据;
控制多个进程访问临界资源,防止并发冲突;
二元信号量实现互斥,计数信号量控制访问资源的进程数量。一般搭配共享内存使用。
共享内存区(Shared Memory)
在物理内存开辟一块空间,多个进程虚拟内存映射到同一块物理内存;
数据不用在内核和用户态来回拷贝,速度是IPC里最快的;
本身不带互斥机制,必须依靠信号量或者锁来控制并发访问,不然会出现数据错乱。
面试一句话总结
管道:亲缘进程单向通信;
Socket:本机或跨机器通用;
消息队列:内核消息缓存,脱离进程生命周期;
信号量:用于进程互斥同步;
共享内存:传输速度最快,需要手动加锁。
对比要点
速度排序:共享内存 > 消息队列 > 管道 > socket;
跨主机:只有socket支持,剩下四种仅限同一台机器。

最新文章

随机文章