4种进程间通信⽅式详解
进程间通信有4种⽅式,以下从简单到复杂的⽅式出场:
1.管道(pipe)
管道是⼀种具有两个端点的通信通道,⼀个管道实际上就是只存在在内存中的⽂件,对这个⽂件操作需要两个已经打开⽂件进⾏,他们代表管道的两端,也叫两个句槟,管道是⼀种特殊的⽂件,不属于⼀种⽂件系统,⽽是⼀种独⽴的⽂件系统,有⾃⼰的数据结构,根据管道的使⽤范围划分为⽆名管道和命名管道。
⽆名管道⽤于⽗进程和⼦进程之间,通常⽗进程创建管道,然后由通信的⼦进程继承⽗进程的读端点句柄和写端点句柄,或者⽗进程有读写句柄的⼦进程,这些⼦进程可以使⽤管道直接通信,不需要通过⽗进程。
命名管道,命名管道是为了解决⽆名管道只能在⽗⼦进程间通信⽽设计的,命名管道是建⽴在实际的磁盘介质或⽂件系统(⽽不是只存在内存中),任何进程可以通过⽂件名或路径建⽴与该⽂件的联系,命名换到需要⼀种FIFO⽂件(有先进先出的原则),虽然FIFO⽂件的inode节点在磁盘上,但仅是⼀个节点⽽已,⽂件的数据还是存在于内存缓冲页⾯中,和普通管道相同。进程通信方式
2.信号
信号,⽤于接受某种事件发⽣,除了⽤于进程间通信之外,进程还可以发送信号给进程本⾝。除了系统内核和root之外,只有具备相同id 的进程才可以信号进⾏通信。
3.消息队列
消息队列是消息的链表,包括Posix消息队列和system v消息队列(Posix常⽤于线程,system常⽤于进程),有权限的进程可以向消息队列中添加消息,有读权限的进程可以读⾛消息队列的消息。
消息队列克服了信号承载信息量少,管道只能承载⽆格式字节流及缓冲区⼤⼩受限等缺陷。
4.共享内存
共享内存使多个进程可以访问同⼀块内存空间,是最快的IPC形式,是针对其他通信⽅式运⾏效率低⽽设计的,往往与其他进程结合使⽤,如与信号量结合,来达到进程间的同步与互斥。传递⽂件最好⽤共享内存的⽅式。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。