进程间通信方式小结

进程间的通信方式,说白话 就是两个进程间的数据如何传输的?

 

1.管道pipe(无名管道)

看一条常见linux命令  ps -ef | grep java   

其中中间的这条 “ | ” 就是管道,

上述这条命令由两部分构成可以看作是两个进程 ps和grep,ps 得到的结果通过管道传递给 grep

 

优点:简单简洁

缺点:只能单向传输,只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

 

2.有名管道

命令:  mkfifo  myPipe    // 我们手动创建一个名为"myPipe" 的管道

echo "this is a pipe" > myPipe    //echo进程向其中写数据myPipe

cat < myPipe                            // cat进程读出管道中数据

 

有名管道类似于一种缓存, 它允许无亲缘关系进程间的通信。

 

3.消息队列

A进程要给B进程发送消息

A将消息写至消息队列,B从消息队列读消息

 

缺点:原理就是从A的内存拷贝到消息队列,再从消息队列拷贝到B的内存空间。拷贝消耗性能

 

4.共享内存

A进程与B进程通过共享内存的方式实现数据交互

共享内存的原理也就是通过二者的虚拟内存指向同一块物理内存 

虚拟内存可以参考这篇  虚拟内存与Linux层级结构

 

缺点:多个进程共享内存可能会出现并发安全问题

 

5.信号量

信号量的本质就是一个计数器,用来实现进程之间的互斥与同步。

信号量本身不是一种消息发送的方式,而是作为共享内存的并发解决办法

可以把信号量看作是一把锁,初始值为1

当有进程访问时,设置为0,其他进程通过判断信号量二实现串行化访问内存,也就解决并发问题了

 

 

6.Socket

Socket套解字也是一种进程间通信机制,代表不同机器间的进程通信方式

 

posted @ 2022-01-06 21:17  六小扛把子  阅读(52)  评论(0编辑  收藏  举报