Fork me on GitHub
0%

进程通信

摘要


我们在面试中常常被问到进程通信的方式有哪些,感觉与我们平时的开发工作没有关系,其实我们也是一直在用它

进程通信方式


1、管道(pipe)
管道又分为无名管道(即匿名管道)和有名管道
其实我们平时经常用到无名管道,在Linux命令中”|”就是无名管道的使用,
他将一个进程的输出传入到另一个进程中,比如:

1
cat xxxlog | grep "xxx"

有名管道可以通过 mkfifo 命令创建
1
mkfifo pipe

2、消息队列

注意,这个消息队列不是我们常说的MQ,Kafka、RocketMQ、RabbitMQ等

消息队列提供了一种从一个进程发送到另一个进程的数据块的方法,
但是像有名管道一样,消息队列的数据最大长度是有限的,这个也是这种进程通信的一个缺点
再多的,我也不清楚了,,,请各路神仙指教了

3、共享内存
共享内存的实质是每个进程都有自己的一个虚拟空间,而不是真实的物理空间,每个线程将自己的虚拟的内存空间指向真实的物理空间,这样其中有一部分的内存空间指向的就是同一块物理空间,这就完成了内存共享的机制;

4、信号量
我们回想内存共享的缺点是什么?就是当多个进程竞争资源怎么办,就类似于多线程的并发问题。
这个时候信号量就派上用场了。
信号量本身是个计数器,用来控制进程之间的互斥和同步,通过信号量的值来控制进程对内存的访问,从而解决了多个进程竞争内存的问题。

5、Socket
套接字就是我们现在在使用的进程通信方式,我们在使用通信工具比如QQ、微信APP和客户端之间的通信就是使用Socket进行通信的。

总结

进程之间的通信方式有几种
  • 管道
  • 消息队列
  • 内存共享
  • 信号量
  • Socket

一分也是爱❤️