进程间通信的常见方式

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

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

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

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


常见的通信方式包括:


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阻塞等待

相关文章
|
3月前
|
消息中间件 Unix Linux
Linux进程间通信(IPC)介绍:详细解析IPC的执行流程、状态和通信机制
Linux进程间通信(IPC)介绍:详细解析IPC的执行流程、状态和通信机制
284 1
|
10月前
|
存储 消息中间件 设计模式
进程通信常见方式
进程通信常见方式
进程通信常见方式
|
1月前
|
消息中间件 负载均衡 安全
进程间通信
数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。进程间通信的本质:让不同的进程先看到同一份资源,但是这份资源不能由双方进程提供,而通常是由操作系统所提供!
26 9
进程间通信
|
1月前
|
消息中间件 Unix Java
进程间通信(IPC)的各种方式与比较
进程间通信(IPC)的各种方式与比较
|
3月前
【进程通信】Syetem V 共享内存(结合代码模拟通信)
【进程通信】Syetem V 共享内存(结合代码模拟通信)
|
11月前
|
消息中间件 网络协议 关系型数据库
Linux进程间通信(IPC)的几种方式
Linux进程间通信(IPC)的几种方式
88 1
|
Unix
进程间通信(一)
进程间通信
53 0
|
消息中间件
进程间通信方式
不同进程运行如果不加以控制会产生未知的后果,我们需要进行进程与线程通信,本期主要分享一些进程通信相关知识。
|
消息中间件
进程间通信(非常实用)
进程间通信(非常实用)