进程间通信

进程间通信是指不同进程之间传播和交换信息,主体是进程,且是大于等于2个进程,工作是通信,进行数据的交换与传播。
在Linux下的多个进程间的通信机制叫做IPC(Interprocess Communication),它是多个进程之间进行相互沟通的一种方法。在Linux下有多种进程间通信的方法:半双工管道、FIFO(命名管道),消息队列、信号量、共享内存等。使用这些通信机制可以为Linux下的网络服务器开发提供灵活而又坚固的框架。日常生活中,一个大型的应用系统往往需要众多进程协作进行,进程通过与内核及其他进程之间的互相通信来协调它们的行为。

进程间通信的目的:
1.数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。
2.共享数据:多个进程想要操作共享数据,一个进程对共享数据一旦进行修改别的进程应该立刻看到。
3.资源共享:多个进程之间共享相同的资源,为了做到这一点,需要内核提供锁和同步机制。
4.通知事件:一个进程需要向另一个或一组进程发送消息,通知其发生了某种事件(如进程终止时要通知父进程)。
5.进程控制:有些进程希望完全控制另一个进程的执行(如debug进程),此时控制进程希望拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

Linux操作系统支持的主要进程间通信的通信机制
在这里插入图片描述

进程间通信方式:
1.管道(pipe):分为有名管道和无名管道。管道可用于具有亲缘关系进程间的通信,命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。
无名管道(PIPE)是半双工的,即数据只能在一个方向上流动,具有固定的读端和写端;无名管道只能用于具有亲缘关系的进程之间的通信,即父子进程或者兄弟进程之间;无名管道可以看成是一种特殊的文件,对于它的读写也可以使用普通的read()、write()等函数,但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。
命名管道(FIFO)可以在无关的进程之间交换数据;命名管道有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中。
2.信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;Linux除了支持Unix早期信号语义函数signal外,还可以支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD(加州大学伯克利分校的伯克利软件公布中心)的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数)。
3.消息队列(Message queue):消息队列是消息的链接表,存放在内核中,一个消息队列由一个标识符(即队列ID)来标记。包括Posix消息队列System V消息队列。消息队列克服了信号传递消息少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。具有足够权限的进程可以按照一定的规则向消息队列中添加新消息;对消息队列有读权限的进程可以从消息队列中读取消息。
特点:(1)消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。(2)消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除。(3)消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按照消息的类型读取。
4.共享内存(Share memory):使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。不同进程可以及时看到对方进程中对共享内存中数据的更新,这种操作需要依靠某种同步操作,如互斥锁和信号量等。
特点:(1)共享内存是最快的一种进程间通信方式,因为进程是直接对内存进行存取。(2)因为多个进程可以同时操作,所以需要进行同步。(3)信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问。
5.信号量(Semaphore):其实它是一个计数器,可以用来控制多个进程对共享资源的访问。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。即主要作为进程间以及同一进程不同线程之间的同步手段。
特点:(1)信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。(2)信号量基于操作系统的PV操作,程序对信号量的操作都是原子操作。(3)每次对信号量的PV操作不仅限于对信号量值加1或减1,而且可以加减任意正整数。(4)支持信号量组。
6.套接字(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上,Linux和System V的变种都支持套接字。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值