进程间通信方式

简介:
3.4.1共享内存 
在相互通信的进程之间设有一个公共内存区,一组进程向该公内存中写,另一组进程从化共内存中读,通过这种方式实现两组进程间的信息交换。 

这种通信模式需要解决两个问题:第一个问题是怎样提供共享内存;第二个是公共内存的互斥关系则是程序开发人员的责任。 

3.4.2消息机制 
消息机制是用于进程间通信的高级通信原语之一。进程在动身过程中,台能需要与其他的进程进行进程 
交换,于是进程通过某种手段发出自己的消息或接收其他进程发来的消息。这种方式类似于人们通过邮局收发信件来实现交换信息的目的。至于通过什么手段收发消息,就像人们选择平信还是航空信一样,是一种具体的消息传递机制。 

1、 消息缓冲通信 
消息缓冲通信技术是由Hansen首先提出的,其基本思想是:根据”生产者-消费者”原理,利用内存中公用消息缓冲区实现进程之间的信息交换. 

内存中开辟了若干消息缓冲区,用以存放消息.每当一个进程向另一个进程发送消息时,便申请一个消息缓冲区,并把已准备好的消息送到缓冲区,然后把该消息缓 冲区插入到接收进程的消息队列中,最后通知接收进程.接收进程收到发送里程发来的通知后,从本进程的消息队列中摘下一消息缓冲区,取出所需的信息,然后把 消息缓冲区不定期给系统.系统负责管理公用消息缓冲区以及消息的传递. 

一个进程可以给若干个进程发送消息,反之,一个进程可以接收不同进程发来的消息.显然,进程中关于消息队列的操作是临界区.当发送进程正往接收进程的消息队列中添加一条消息时,接收进程不能同时从该消息队列中到出消息:反之也一样. 

消息缓冲区通信机制包含以下列内容: 

(1) 消息缓冲区,这是一个由以下几项组成的数据结构: 
1、 消息长度 
2、 消息正文 
3、 发送者 
4、 消息队列指针 

(2)消息队列首指针m-q,一般保存在PCB中。 
(1) 互斥信号量m-mutex,初值为1,用于互斥访问消息队列,在PCB中设置。 
(2) 同步信号量m-syn,初值为0,用于消息计数,在PCB中设置。 
(3) 发送消息原语send 
(4) 接收消息原语receive(a) 
图 

2、信箱通信 
为了实现进程间的通信,可以设立一个通信机构——信箱,以发送信件以及接收回答信件为进程间通信的基本方式。 

当一个进程希望与另一进程通信时,就创建一个链接两个进程的信箱,发送进程把信件投入信箱,而接收进程可以在任何时刻取走信件。 

一个信箱的结构可以由“信箱说明”和“信箱体”两部分组成。 

在信箱说明中,一般有如下的数据结构: 
可存信件数是在设立信箱时预先确定的,表明信箱的容量大小, 
已有信件数指出信箱中已有的信件的数量 
通过可存信件数和已有信件数就能判别信箱是否满和信箱中是否有信件。 
可存信件的指针指示当前可存入一封信的位置。该指针的初始值为指向可存的第一封信的位置。 
当存入一封信后,则应该修改已有信件数和可存信件的指针。相应的,若信箱中有信,则每次从中取出一封信,也应该修改已有信件数和可存信件的指针。 

为了实现信箱通信,必须提供相应的原语,如创建信箱原语、撤消信箱原语、发送信件原语和接收信件原语等。 

采用信箱通信的最大好处是,发送方和接收方不必直接建联系,没有处理时间上的限制。发送方可以在任何时间发信,接收方也可以在任何时间收信。 

由于发送方和接收方都是独立工作的,如果发得快而收得慢,则信箱会溢出。相反,如果发得慢而收得快,则信箱会变空。因此,为避免信件丢失和错误的送出信件,一般而言通信应有如下的规则: 

(1)若发送信件时信箱已满,则发送进程应被置等信箱状态,直到信箱有空时才被释放。 
(2)若取信件时信箱中无信,则接收进程应被子置成等信件状态,直到有信件时才被释放。 

3、 管道通信 

管道通信首先出现在UNIX操作系统中。作为UNIX的一大特色,管道通信立即引起了人们的兴趣。由于管道通信的有效性,一些系统继UNIX之后相继引入了管道技术,管道通信是一种重要的通信方式。 

所谓管道,就是连接在两个进程之间的一个打开的共享文件,专用于进程之间进行数据通信。发送进程可以源源不断地从管道一端写入数据流,每次写入的长度是可 变的;接收进程在需要时可以从管道的另一端读出数据,读出单位长度也是可变的。显然,管道通信的基础是文件系统。 

在对管道文件进行读写操作过程中,发送进程和接收进程要实施正确的同步和互斥,以确保通信的正确性。管道通信机制中的同步与互斥都由操作系统自动进行,对用户是透明的。 

管道通信具有传送数据量大的优点,但通信速度较慢.  
还有就是socket通信 
一些不是很”常见“的进程通信方式: 
Internet通信 它让应用程序从Internet地址上载或下载文件 

RPC:远程过程调用,很少使用,因其与UNIX的RPC不兼容. 

串行/并行通信(Serial/Parallel Communication) 
它允许应用程序通过串行或并行端口与其他的应用程序通信 

COM/DCOM通过COM系统的代理存根方式进行进程间数据交换,但只能够表现在对接口函数的调用时传送数据,通过DCOM可以在不同主机间传送数据.

本文转自博客园知识天地的博客,原文链接:进程间通信方式,如需转载请自行联系原博主。


相关文章
|
人工智能 前端开发 Serverless
【图生图】一键部署3D卡通风格模型
本实验将3D卡通风格图像开源模型部署在阿里云函数计算上,让您可以把人物图像实时处理成3D卡通版图像,快来为自己生成可爱的3D卡通风格头像吧!本实验答疑钉钉群:29290019867。
|
4月前
|
存储 数据采集 自然语言处理
Python爬取公众号文章并实现关键词分析
Python爬取公众号文章并实现关键词分析
|
前端开发 API UED
拥抱微前端架构:构建灵活、高效的前端应用
【10月更文挑战第17天】微前端架构是一种将前端应用拆分为多个小型、独立、可复用的服务的方法,每个服务可以独立开发、部署和维护。本文介绍了微前端架构的核心概念、优势及实施步骤,并分享了业界应用案例和职业心得,帮助读者理解和应用这一新兴架构模式。
|
Kubernetes 测试技术 数据库
详解微服务应用灰度发布最佳实践
相对于传统软件研发,微服务架构下典型的需求交付最大的区别在于有了能够小范围真实验证的机制,且交付单位较小,风险可控,灰度发布可以弥补线下测试的不足。本文从 DevOps 视角概述灰度发布实践,介绍如何将灰度发布与 DevOps 工作融合,快来了解吧~
33280 19
|
数据采集 存储 JavaScript
JS逆向案例:巨潮资讯数据采集
JS逆向案例:巨潮资讯数据采集
370 0
|
机器学习/深度学习 搜索推荐 计算机视觉
【阿里云OpenVI-人脸感知理解系列之人脸识别】基于Transformer的人脸识别新框架TransFace ICCV-2023论文深入解读
本文介绍 阿里云开放视觉智能团队 被计算机视觉顶级国际会议ICCV 2023接收的论文 "TransFace: Calibrating Transformer Training for Face Recognition from a Data-Centric Perspective"。TransFace旨在探索ViT在人脸识别任务上表现不佳的原因,并从data-centric的角度去提升ViT在人脸识别任务上的性能。
3141 341
|
IDE 物联网 Unix
Linux上应用竟然可以轻松的移植到RTOS上
Linux上应用竟然可以轻松的移植到RTOS上
Linux上应用竟然可以轻松的移植到RTOS上
微信小程序实现上传视频 / 上传图片功能以及整合上传视频 / 上传图片功能(超详细)
微信小程序实现上传视频 / 上传图片功能以及整合上传视频 / 上传图片功能(超详细)
|
前端开发 JavaScript Java
IDEA中修改了Web项目后,更新资源 类和资源 重新部署的区别
IDEA中修改了Web项目后,更新资源 类和资源 重新部署的区别
503 1
|
机器学习/深度学习 存储 计算机视觉
YOLOv8改进 | 2023 | RCS-OSA替换C2f实现暴力涨点(减少通道的空间对象注意力机制)
YOLOv8改进 | 2023 | RCS-OSA替换C2f实现暴力涨点(减少通道的空间对象注意力机制)
385 0