进程间通信的常见方式

简介: 进程间通信的常见方式

进程间通信是计算机系统中不同进程之间进行数据交换和共享信息的方式。

父子进程之间其他地址空间不一样,但共享同一块内核空间。

进程间通信的本质还是通过内核开辟缓冲区,一个进程写,一个进程读这样的工作原理。


常见的通信方式包括:


1.管道(Pipe):一种单向通信方式,用于在父子进程或者兄弟进程之间传输数据。

2.命名管道(Named Pipe):与管道类似,但具有路径名与之关联,允许无亲缘关系的进程间进行通信。

3.信号(Signal):用于通知进程发生了某种事件,例如中断信号。

4.消息队列(Message Queue):允许进程通过消息传递进行通信,消息在队列中按顺序排列。

5.共享内存(Shared Memory):允许多个进程访问同一块物理内存,实现高效的数据共享。

6.套接字(Socket):在网络编程中常见,允许不同主机上的进程进行通信。

7.信号量(Semaphore):用于控制对共享资源的访问,防止多个进程同时访问造成的竞争条件。

8.文件(File):通过读写文件进行通信,也可以通过文件锁实现进程间的同步和互斥。

管道

管道是最基本的一种IPC机制,只能用于有血缘关系的父子进程或者是兄弟进程。

特点:

本质是一个伪文件(内核缓冲区)

  • 基于环形队列机制,内核里的一个缓冲区
  • 一个读文件描述符,一个写文件描述符
  • 管道规定写段流入,读端流出

局限性:

  • 双向半双工(socket通信是双向全双工)
  • 不能自己写自己读
  • 数据读完就没了,不能反复读取(读完描述符地址后移不可恢复)
  • 只能有公共祖先的进程之间

上面几个特点和局限性都可以借助环形队列来理解。

管道的基本用法

int pipe(int fd[2]) //创建并打开管道

fd[0]:读端

fd[1]:写端

返回值0为成功

读端:

1.管道中有数据 read返回读到的字节数

2.管道中没数据 :

       1.写端无描述符 read返回0(类似读到文件尾)

       2.写段有描述符 read阻塞等待


写段:

1.读端全部被关闭  进程被异常终止

2.读端没有被全部关闭  

       1.管道没满,write数据,返回写入的实际字节数

       2.管道满,write阻塞等待

相关文章
|
存储 消息中间件 设计模式
进程通信常见方式
进程通信常见方式
进程通信常见方式
|
2月前
|
消息中间件 Python
深入理解操作系统的进程间通信(IPC)机制
本文将探讨操作系统中的核心概念——进程间通信(IPC),揭示其在系统运作中的重要性及实现方式。通过分析不同类型的IPC手段,如管道、信号、共享内存等,帮助读者更好地理解操作系统的内部工作原理及其在实际应用中的表现。
132 1
|
2月前
|
消息中间件 存储 大数据
深入理解操作系统中的进程间通信(IPC)机制
本文旨在探讨操作系统中进程间通信(IPC)的核心机制与其重要性。通过对不同IPC手段如管道、信号、消息队列及共享内存等的详细解析,揭示它们如何高效地促进进程间的信息交换与同步。文章不仅阐述各种IPC技术的实现原理,还探讨了它们在实际系统应用中的场景与优化策略,为系统开发者提供全面而深入的理解。
|
4月前
|
消息中间件 Unix Java
进程间通信(IPC)的各种方式与比较
进程间通信(IPC)的各种方式与比较
|
6月前
【进程通信】Syetem V 共享内存(结合代码模拟通信)
【进程通信】Syetem V 共享内存(结合代码模拟通信)
|
11月前
|
消息中间件 Unix Linux
【Linux学习】进程间通信的方式(匿名管道、命名管道、共享内存)1
【Linux学习】进程间通信的方式(匿名管道、命名管道、共享内存)
447 0
|
11月前
|
存储 消息中间件 监控
【Linux学习】进程间通信的方式(匿名管道、命名管道、共享内存)2
【Linux学习】进程间通信的方式(匿名管道、命名管道、共享内存)
73 0
|
消息中间件 网络协议 关系型数据库
Linux进程间通信(IPC)的几种方式
Linux进程间通信(IPC)的几种方式
108 1
|
Linux
【进程间通信:管道】(二)
【进程间通信:管道】(二)
103 0
|
消息中间件 Unix Linux
【进程间通信:管道】(一)
【进程间通信:管道】(一)
64 0