进程间通信

进程的同步和通信是两个很容易弄混的概念,它们的区别在于:

  • 进程同步:控制多个进程按一定顺序执行
  • 进程通信:进程间传输信息
    进程通信是一种手段,而进程同步是一种目的。也可以说,为了能够达到进程同步的目的,需要让进程进行通信,传输一些进程同步需要的信息

1.管道

管道只能父子进程使用,且只支持半双工通信(单向交替传输)


进程间通信_第1张图片

2.FIFO

也称为命名管道,取出了只能在父子进程中使用的限制。
FIFO常用语client-server应用程序中,FIFO用作汇聚点,在客户进程和服务器进程之间传递数据。

进程间通信_第2张图片

3.消息队列

相比于FIFO,消息队列具有以下优点:

  • 消息队列可以独立于读写进程存在,从而避免了FIFO中同步管道的打开和关闭时可能产生的困难
  • 避免了FIFO的同步阻塞问题,不需要进程自己提供同步方法
  • 读进程可以根据消息类型有选择的接收信息,而不像FIFO那样只能默认地接收

4.信号量

它是一个计数器,用于为多个进程提供对共享数据对象的访问

5.共享存储

允许多个进程共享一个给定的存储区。因为数据不需要在进程之间复制,所以这是最快的一种IPC

需要使用信号量用来同步对共享存储的访问

多个进程可以将同一个文件映射到它们的地址空间从而实现共享内存。
另外XSI共享内存不是使用文件,而是使用内存的匿名段

6.套接字

与其它通信机制不同的是,它可用于不同机器间的进程通信

参考文章:

进程/线程同步的方式和机制,进程间通信
linux进程同步/通信,线程同步/通信的区别
进程的同步与通信,进程与线程同步的区别,进程与线程通信的区别

你可能感兴趣的:(进程间通信)