进程通信方法的特点以及使用场景
文章目录
- 前言
- 一、共享存储
- 二、消息传递
- 三、管道通信
- 四、几种IPC方法优缺点比较
前言
进程通信是指进程之间的信息交换,根据传输数据的大小,可以把进程通信分为低级通信机制(效率低,例如信号量机制);高级通信机制(OS封装了细节,直接高效使用原语)
进程通信是指进程之间的信息交换。PV操作是低级通信方式,高级通信方式是指以较高的效率传输大量数据的。高级通信方法主要有以下三类。
一、共享存储
共享存储是指多个进程共享一块内存,是专门用来解决不同进程之间的通信问题的,由于是直接对内存进行数据传输操作,所以是速度最快的IPC(inter-process communication)方式,因为是共享内存,所以需要配合信号量机制实现同步。
二、消息传递
消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
在消息传递系统中,进程间的数据交换是以格式化的消息(Message)为单位的。若通信的进程之间不存在可直接访问的共享空间,则必须利用操作系统提供的消息传递方法实现进程通信。进程通过系统提供的发送消息和接收消息两个原语进行数据交换。
1)直接通信方式。发送进程直接把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列中取得消息。
2)间接通信方式。发送进程把消息发送到某个中间实体,接收进程从中间实体取得消息。这种中间实体一般称为信箱,这种通信方式又称信箱通信方式。
三、管道通信
所谓“管道”,是指用于连接一个读进程和一个写进程以实现它们之间的通信的一个共享文件,又名pipe文件。向管道(共享文件)提供输入的发送进程(即写进程),以字符流形式将大量的数据送入(写)管道;而接受管道输出的接收进程(即读进程)则从管道中接收(读)数据。为了协调双方的通信,管道机制必须提供以下三方面的协调能力:互斥、同步和确定对方的存在。
1、无名管道,以下简称“管道”。管道具有以下两种局限性:1)管道为半双工的;2)管道只能在具有公共祖先的两个进程之间使用,通常,一个管道由一个进程创建,这个管道就能在父进程和子进程之间使用了。
2、FIFO,即命名管道,与无名管道不同的是,其可以在不相关的程序之间交换数据。FIFO有两种用途:1)shell命令使用FIFO将数据从一条管道传送到另一条管道时,无须创建中间的临时文件;2)客户进程-服务器进程应用程序中,FIFO用作汇聚点,在客户进程和服务器进程二者之间传递数据。
四、几种IPC方法优缺点比较
1、如果用户传递的信息较少,或者只是为了触发某些行为。信号是一种简洁有效的通信方式。但若是进程间要求传递的信息量较大或者存在数据交换的要求,就需要考虑别的通信方式了。
2、无名管道与有名管道的区别在于单向通信以及有关联的进程。
3、消息队列允许任意进程通过共享队列来进行进程间通信。并由系统调用函数来实现消息发送和接收之间的同步。从而使得用户在使用消息缓冲进行通信时不再需要考虑同步问题,使用相对方便。
但是消息队列中信息的复制需要耗费CPU时间,不适宜信息量大或频繁操作的场合。
4、消息队列与管道方式的区别在于,消息队列可以实现多对多,并需要在内存中实现,而管道可以在内存或磁盘上实现。
5、共享内存无须复制,信息量大是其最大的优势。但是需要考虑同步问题。
转载内容:“几种IPC方法优缺点比较” 作者:wenmingxing 链接:https://www.jianshu.com/p/4989c35c9475 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
进程通信方法的特点以及使用场景相关推荐
- Android中的跨进程通信方法实例及特点分析(二):ContentProvider
1.ContentProvider简单介绍 在Android中有些数据(如通讯录.音频.视频文件等)是要供非常多应用程序使用的.为了更好地对外提供数据,Android系统给我们提供了Content P ...
- Windows线程同步机制的区别与比较及进程通信方法
原文:http://blog.csdn.net/eulb/article/details/2177500 多线程同步机制 (Windows) 线程的同步机制: 1. Event 用事件(Event ...
- Android IPC 进程进程间通信或跨进程通信
Android IPC 机制 老话长谈,趁现在有时间对IPC做一个具体的总结. IPC是Inter-Process Communication的缩写,含义就是进程间通信或者跨进程通信,是指两个进程之间 ...
- Linux内核态之间进程通信,内核态和用户态通信(二)--实现
本文主要使用netlink套接字实现中断环境与用户态进程通信. 系统环境:基于linux 2.6.32.27 和 linux 3.16.36 Linux内核态和用户态进程通信方法的提出和实现 用户上下 ...
- Linux内核态之间进程通信,Linux 系统内核空间与用户空间通信的实现与分析[转载]...
[https://www.ibm.com/developerworks/cn/linux/l-netlink/index.html] 多数的 Linux 内核态程序都需要和用户空间的进程交换数据,但 ...
- TCP与UDP协议初步学习——网络环境中分布式进程通信的基本概念
TCP与UDP协议初步学习--网络环境中分布式进程通信的基本概念 一.单机系统中进程通信方法 进程和进程通信是操作系统中最基本的概念,首先通过回忆操作系统课程中,关于单击系统中进程和进程通信的问题描述 ...
- electron监听网页_Electron 进程通信
本文作者:IMWeb laynechen 未经同意,禁止转载 Electron 中的进程分类 在 Electron 中,存在两种进程:主进程和渲染进程. 主进程 (Main Process) 一个 E ...
- 操作系统8-死锁和进程通信----(库函数scanf和printf是基于管道读写实现的!
大纲: 死锁概念及死锁处理方法 银行家算法 死锁检测 进程通信方法:信号.管道.消息队列.共享内存 一.死锁 背景 可重用资源:资源不能被删除且任何时刻只能有一个进程使用,进程释放资源后其他进程可重用 ...
- Linux下进程通信的八种方法
Linux下进程通信的八种方法:管道(pipe),命名管道(FIFO),内存映射(mapped memeory),消息队列(message queue),共享内存(shared memory),信号量 ...
最新文章
- 5月18发布会,这次TDSQL又有什么大动作?
- java poi excel 单元格样式_java poi批量导出excel 设置单元格样式
- 世界科学技术通史_全球科技通史
- 45 WM配置-作业-库存盘点-清除差异(库存管理接口)
- linux配置ARP内核参数,详细讲解linux内核参数arp_announce和arp_ignore
- 1.《Spring学习笔记-MVC》系列文章,讲解返回json数据的文章共有3篇,分别为:...
- 计算机毕业设计php的村镇干部绩效考核系统
- MySQL5.7版本64位下载及安装详细教程
- H264三种码率控制方法(CBR, VBR, CVBR,)CRF和CQP
- Windows操作系统----事件日志----事件查看器
- java 模拟登陆人人网_java模拟登陆人人,通过验证码
- 如何使用 Filebeat,ILM 和数据流跨多个索引管理 Elasticsearch 数据
- 女人血气不足很伤身体 做这5步立马解决
- Python九九口诀表
- Java程序员从笨鸟到菜鸟之(序言)+全部链接
- Eureka(一): Eureka Client
- 密码锁 Locker
- 一步步读懂Pytorch Chatbot Tutorial代码(四) - 为模型准备数据
- 升级Win11后Win安全中心丢失或者点击没反应的解决方法
- Java基础----Java语言简介
热门文章
- java swing 选项卡_java – 如何通过单击按钮在jTabbedPane中切换选项卡?
- ct与x光的哪个辐射大_ct和x光哪个辐射大
- java届的黄埔军校_法学界的“黄埔军校”:拒绝与985合并,是其最大遗憾
- java中ajax的用途_java Ajax的应用
- Mac. 修改bash_file
- 支持向量机(SVM)复习总结
- 最短路径 一 Dijkstra 模板(O(n^2))
- 【循序渐进学Python】9.异常处理
- yaourt下载安装dropbox提示curl ssl证书错误
- python注册登陆程序未响应_SpringBoot实现登录注册常见问题解决方案