进程间通信的常见方式

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

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

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

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


常见的通信方式包括:


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

相关文章
|
XML JSON JavaScript
【前端】Vue项目中 JSON 编辑器的使用
【前端】Vue项目中 JSON 编辑器的使用
4951 0
|
10月前
|
机器学习/深度学习 算法 前端开发
RAG-Gym: 基于过程监督的检索增强生成代理优化框架
本文介绍RAG-Gym框架,通过过程监督优化推理与搜索代理。针对传统RAG架构效能限制及提示工程依赖问题,提出统一优化方法。核心贡献包括:设计ReSearch代理架构实现推理与搜索协同;验证过程奖励模型提升性能;系统分析过程监督来源、奖励模型迁移性和性能扩展规律。实验表明,RAG-Gym显著增强知识密集型任务中搜索代理表现,为未来智能系统研发提供理论与实践参考。
264 3
RAG-Gym: 基于过程监督的检索增强生成代理优化框架
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
488 0
|
Linux
CentOS如何修改SEMMNI
【6月更文挑战第18天】CentOS如何修改SEMMNI
780 1
|
JSON 安全 调度
Android面试题之Kotlin协程一文搞定
本文介绍了协程的基础知识,强调它是轻量级线程,用于处理耗时任务而不阻塞主线程,确保主线程安全。协程特点包括使异步逻辑同步化,并允许函数挂起和恢复。挂起函数由`suspend`关键字标识,只能在协程内部调用。挂起与阻塞的主要区别在于挂起不会导致主线程ANR。 结构化并发和协程作用域(如`CoroutineScope`、`GlobalScope`、`MainScope`等)提供了任务管理,文章还探讨了并发、启动模式、协程取消、超时任务以及资源释放等主题。
326 0
|
Android开发
Android studio 出现Plugin [id: ‘com.android.application‘, version: ‘8.1.0‘, apply: false] 问题解决办法
Android studio 出现Plugin [id: ‘com.android.application‘, version: ‘8.1.0‘, apply: false] 问题解决办法
6298 2
|
Linux
Linux网络编程(多路IO复用select函数使用)
Linux网络编程(多路IO复用select函数使用)
293 0
springboot集成swagger2并分组全局设置Authorization
springboot集成swagger2并分组全局设置Authorization
530 0
CentOS 系统常用命令详解
本文介绍了CentOS中11个常用的命令,包括`ls`(列出文件和目录)、`cd`(切换目录)、`pwd`(显示当前目录)、`mkdir`(创建目录)、`rm`(删除文件或目录)、`cp`(复制文件或目录)、`mv`(移动或重命名文件)、`cat`(查看文件内容)、`grep`(搜索文件内容)和`top`(显示系统进程信息)。此外,还提到了包管理器`yum`用于安装、升级和移除软件包。熟悉这些命令能提升在CentOS系统中的管理效率。
|
安全
UDS服务
UDS服务
533 0