进程间通信方式

进程通信的方式主要有:

1.管道
2.命名管道
3.信号
4.消息队列
5.共享内存
6.信号量
7.套接字

补充:
1、2、3、5、6 一般是用于同一机器中不同进程间的通信,
4、7可以实现不同机器之间不同进程间的通信。

进程通信:管道

管道,通常指的是无名管道。

  • 它是半双工的,即数据只能在一个方向上流动,具有固定的读端和写端。
  • 它只能用于具有亲缘关系的进程之间进行通信,如父子进程或者兄弟进程。
  • 它可以看做一种存放在内存内,独立于文件系统之外的进程之间的共享文件。
    进程间通信方式

进程通信:命名管道

命名管道,即为FIFO。

  • 命名管道可以用于无关的进程进行通信。
  • 命名管道以一种特殊设备文件形式存放在文件系统之中。
  • 数据采用先进先出的方式进行读写。
    进程间通信方式

进程通信:消息队列

消息队列,如activemq提供了异步通信方式。

  • 消息队列是面向记录的,其中的消息具有特定的格式以及特点的优先级。(通常以帧的形式进行传输)
  • 消息队列独立于发送与接收进程。进程终止时,消息队列内容不会被删除。
  • 消息队列的读取可以不按照“先进先出”的方式,可以根据业务需求进行配置。

进程通信:信号量

信号量,本质上是一个计数器。它是用来进程间的互斥与同步,而不是用来实现进程间数据通信。

  • 信号量用于进程间同步,若要进程之间传递数据需要结合共享内存。
  • 信号量基于操作系统的PV操作,程序对信号量的操作都是原子操作。
  • 每次对于信号量的PV操作不仅仅可以加一或者减一,可以加减任意正整数。

注:
PV操作是实现进程互斥与同步的有效方法。
原子操作指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束。

进程通信:共享内存

共享内存指的是两个或者多个进程共享一个指定的内存区域。

  • 共享内存是一种性能最好的进程通信的方式,因为进程直接从内存中进行数据读写。
  • 由于共享内存允许多进程同时进行读写操作,所以要借助信号量进程进程间数据同步。

进程通信:信号

信号,进程之间在通信之前约定,通过信号表,约定特定的信号代表特定的含义。

  • 用于通知接受进程有某种事件的发生。
  • 除了用于进程间通信外,还能发送信号给进程本身。

进程通信:套接字

套接字,即Socket,根据是否面向连接又可以分成TCP和UDP。

  • 一般用于不同机器之间的通信。