Linux IPC之简介

版权声明:此博客为个人博客,不涉及商业用途,仅提供学习参考,内容均来自个人原创以及互联网转载和摘录。 如果本博客侵犯了您的权益,请联系本人,本人将会在第一时间删除侵权文章! https://blog.csdn.net/qq_22902919/article/details/87879628

Interprocess Communication brief introduction

Linux 下的进程通信手段基本上是从 UNIX 平台上的进程通信手段继承而来的。而对 UNIX 发展做出重大贡献的两大主力 AT&T 的贝尔实验室及 BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间的通信方面的侧重点有所不同。前者是对 UNIX 早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,其通信进程主要局限在单个计算机内;后者则跳过了该限制,形成了基于套接口(socket)的进程间通信机制。而 Linux 则把两者的优势都继承了下来。

  • UNIX 进程间通信(IPC)方式包括管道、FIFO 以及信号。
  • System V 进程间通信(IPC)包括 System V 消息队列、System V 信号量以及 System V 共享内存区。
  • Posix 进程间通信(IPC)包括 Posix 消息队列、Posix 信号量以及 Posix 共享内存区。

在这里插入图片描述
linux 进程之间的通讯主要有下面几种:

  1. 管道 pipe 和命名管道:管道有亲缘关系进程间的通信,命名管道还允许无亲缘关系进程间通信。
  2. 信号 signal:在软件层模拟中断机制,通知进程某事发生
  3. 消息队列:消息的链表包括 posix 消息队列和 SystemV 消息队列
  4. 共享内存:多个进程访问一块内存主要以同步。
  5. 信号量:进程间同步。
  6. 套接字 socket:不同机器间进程通信。

下面是对它们的详解:
(1)管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。
(2)信号(Signal):信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生,一个进程收到一个信号与处理器收到一个中断请求效果上可以说是一样的。
(3)消息队列(Messge Queue):消息队列是消息的链接表,包括 Posix 消息队列和 SystemV 消息队列。它克服了前两种通信方式中信息量有限的缺点,具有写权限的进程可以按照一定的规则向消息队列中添加新消息;对消息队列有读权限的进程则可以从消息队列中读取消息。
(4)共享内存(Shared memory):可以说是最有用的进程间通信方式,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据的更新。这种通信方式需要依靠某种同步机制,如互斥锁和信号量等。
(5)信号量(Semaphore):主要作为进程之间以及同一进程的不同线程之间的同步和互斥手段。
(6)套接字(Socket):这是一种更为一般的进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛 。

有兴趣的可以看看:
《LNIX系统编程手册 上》.((德)Michael Kerrisk)
《LNIX系统编程手册 下》.((德)Michael Kerrisk)
《UNIX环境高级编程第二版》(W. Richard Stevens、Stephen A. Rago)

猜你喜欢

转载自blog.csdn.net/qq_22902919/article/details/87879628