当前位置: 首页 > news >正文

进程通信

     进程通信,指的是进程之间相互交换信息。从某种意义上说进程同步和互斥也是一种进程通信,只是交换的数据量小,因此成为低级通信。

     目前高级通信方式分位三大类:共享存储器系统、消息传递系统和管道通信系统。

共享存储器系统

    这种通信方式要求进程之间共享某些变量,通过这些变量交换信息。但这这些变量要在各进程之间互斥使用。


消息传递系统

    广泛应用的一种通信机制。在消息化传递系统中,进程之间交换数据以格式化的方式,又称为报文。按照其实现方式的不同分为直接通信和间接通信。

   (1)直接通信:发送进程直接把消息发送给接受进程。并挂在接受进程的消息缓冲队列上,接受进程从缓冲队列中取出来。

   (2)间接通信:发送进程把消息发给某个中间实体中,接受进程从中取出消息。这种中间实体叫做信箱

     要支持这种通信方式,操作系统应该提供若干个消息缓冲区,用以存放消息。每当一个进程向另一个进程发送消息时,首先向操作系统申请一个消息缓冲区,并把已制备好的消息从发送区复制到该缓冲区,然后把它复制插入接收进程的消息链中。所有发给同一个进程的消息缓冲区构成该进程的消息链,该进程PCB中的mq指针指向该链表头。

     信箱通信:是消息缓冲通信的一种改进,是一种间接通信方式。可由发送进程创建一个连接两个进程的信箱,通信时发送进程只需要把它的信件投入信箱,接收进程就可以在任何时间取走信件,不会丢失。


管道通信

    所谓管道就是用于连接读进程和写进程之间的一个共享文件。向管道(共享文件)提供输入的发送进程,以字符流的形式将大量的数据写入管道。而接收管道(共享文件)输出的接收进程从管道中接收数据。


Linux进程通信

(1)管道:半双工,数据只能单向流动,而只能在具有亲缘关系的进程间使用。管道是一种特殊的文件,这个文件只存在与内存中。管道只能承载无格式字符流以及缓冲区大小等缺点。

(2)命名管道:半双工,允许无亲缘关系的进程间使用。命名管道是一个设备文件,只需要给出访问路径就行了。

(3)信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程在访问资源时,其他资源也来访问。

(4)消息队列:消息队列是消息的链表,存放在内核中并由消息队列标示符标识。消息队列传递的消息量少。

(5)信号:信号是一种比较复杂的通信方式,用于通知某个进程某个时间发生。

(6)共享内存:共享内存时映射一段能被其他进程所访问的内存,这段内存由一个进程创建但是多个进程都可以访问。共享内存时最快的IPC方式

(7)socket通信:可与不同机器之间的进程实现进程通信。


 

相关文章:

  • Delphi控制Excel
  • Tigase XMPP Server源码部署
  • 在iphone越狱机器中使用Hook
  • 报错:具有键...的ViewData项属于类型...,但它必须属于类型IEnumerableSelectListItem...
  • DELPHI7在WIN8和WIN10下安装和运行
  • mysql 如何选择随机行
  • 字符串通信协议解析函数
  • 虚拟机下host-only模式服务器之间通信
  • DATASNAP远程方法返回TSTREAM正解
  • 对比学习UIKit和AppKit--入门级
  • SVM算法入门
  • 分布函数(连续型连续型)
  • iOS应用开发攻略(助你iOS开发中攻城拔寨)
  • 在Struts2标签s:textfield中显示正确的日期
  • sql 用户定义函数自动生成自增长ID
  • angular学习第一篇-----环境搭建
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • Docker 笔记(2):Dockerfile
  • HTML中设置input等文本框为不可操作
  • Java-详解HashMap
  • React+TypeScript入门
  • V4L2视频输入框架概述
  • 服务器之间,相同帐号,实现免密钥登录
  • 给github项目添加CI badge
  • 使用Swoole加速Laravel(正式环境中)
  • 微服务入门【系列视频课程】
  • 一、python与pycharm的安装
  • 我们雇佣了一只大猴子...
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • #QT(TCP网络编程-服务端)
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (二)丶RabbitMQ的六大核心
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (力扣题库)跳跃游戏II(c++)
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (一)Java算法:二分查找
  • (一)基于IDEA的JAVA基础10
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)视频码率,帧率和分辨率的联系与区别
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • ./configure、make、make install 命令
  • .NET BackgroundWorker
  • .net 调用php,php 调用.net com组件 --
  • .NET开源快速、强大、免费的电子表格组件
  • .NET文档生成工具ADB使用图文教程
  • .Net下的签名与混淆
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决