(1)管道 

管道分为无名管道和有名管道。

无名管道

无名管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用,进程的亲缘关系一般指的是父子关系。无名管道一般用于两个不同进程之间的通信。

当一个进程创建了一个管道,并调用fork创建自己的一个子进程后,父进程关闭读管道端,子进程关闭写管道端,,这样提供了两个进程之间数据流动的一种方式。

有名管道也是一种半双工的通信方式,但是它允许无亲缘关系进程间的通信。

它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中。这样,即使与FIFO的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过FIFO相互通信(能够访问该路径的进程以及FIFO的创建进程之间),因此,通过FIFO不相关的进程也能交换数据。

无名管道

优点:简单方便;

缺点:

  • 局限于单向通信

  • 只能创建在它的进程以及其有亲缘关系的进程之间;

  • 缓冲区有限

有名管道

优点:可以实现任意关系的进程间的通信;

缺点:

  • 长期存于系统中,使用不当容易出错;

  • 缓冲区有限

(2)信号量 

信号量是一个计数器,可以用来控制多个线程对共享资源的访问。它不是用于交换大批数据, 而用于多线程之间的同步,它常作为一种锁机制,防止某进程在访问资源时其它进程也访问该资源,因此 , 主要作为进程间以及同一个进程内不同线程之间的同步手段。

优点:可以同步进程。

缺点:信号量有限。

(3)消息队列 

消息队列是消息的链表,存放在内核中并由消息队列标识符标识,消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等特点。

消息队列是UNIX下不同进程之间可实现共享资源的一种机制,UNIX允许不同进程将格式化的数据流以消息队列形式发送给任意进程,对消息队列具有操作权限的进程都可以使用msget完成对消息队列的控制,通过使用消息类型,进程可以按任何顺序读信息,或为消息安排优先级顺序。

优点:可以实现任意进程间的通信,并通过系统调用函数来实现消息发送和接收之间的同步,无需考虑同步问题,方便。

缺点:信息的复制需要额外消耗CPU的时间,不适宜于信息量大或操作频繁的场合。

(4)共享内存

共享内存是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问,共享内存是最快的IPC(进程间通信)方式, 它是针对其它进程间通信方式运行效率低而专门设计的,它往往与其他通信机制,如信号量,配合使用,进而实现进程间的同步与通信。

共享内存的特点

  • 共享内存是以传输数据为目的 。

  • 共享内存无同步无互斥 。

  • 共享内存是所有进程间通信速度最快的。

  • 共享内存的生命周期随内核

优点:使用共享内存进行进程间的通信非常方便,而且函数的接口也简单,数据的共享使进程间的数据不用传送,而是直接访问内存,加快了程序的效率。同时,它也不像无名管道那样要求通信的进程有一定的父子关系。

缺点:

  • 通信是通过将共无法实现享空间缓冲区直接附加到进程的虚拟地址空间中实现。

  • 利用内存缓冲区直接交换信息,内存的实体存在于计算机中,只能让同一个计算机系统中的诸多进程共享,不方便多个计算机网络通信。

  • 共享内存没有提供同步的机制,这使得我们在使用共享内存进行进程间通信时,往往要借助其他的手段来进行进程间的同步工作。

进程间通信方式有哪些?有何优缺点?相关推荐

  1. 【Linux】 ——进程间通信方式优缺点比较

    进程间通信方式 @[TOC](进程间通信方式) 1.管道 2.消息队列 3.共享内存 4.信号量 5.Socket 1.管道 1.1 匿名管道 主要用于有亲缘关系的进程间通信 我们先来看一条Linux ...

  2. [【转载】 linux进程间通信方式

    目录 目录 进程通信的目的 Linux 进程间通信(IPC)的发展 linux使用的进程间通信方式 管道( pipe ) 信号量( semophore ) 消息队列( message queue ) ...

  3. 进程间通信方式——管道

    进程间通信 1.进程间通信概念及方式 2.管道 2.1 管道概念 2.2 管道的原理 2.3 管道的局限性 2.4 管道的优缺点 3.管道创建与应用 3.1 pipe函数创建并打开 3.2 程序实现 ...

  4. dat关闭某进程_超详细解析!工程师必会的Linux进程间通信方式和原理

    ▍进程的概念 · 进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就创建了一个进程,在这个过程中,伴随着资源的分配和释放.可以认为进程是一个程序的一次执行过程. ▍进程通信的概念 · 进 ...

  5. 两个不同的进程 虚拟地址相同_记一次阿里面试题:都有哪些进程间通信方式?麻烦你不要再背了...

    1 管道 学习软件工程规范的时候,我们知道瀑布模型,在整个项目开发过程分为多个阶段,上一阶段的输出作为下一阶段的输入.各个阶段的具体内容如下图所示 最初我们在学习Linux基本命令使用的时候,我们经常 ...

  6. 记一次阿里面试题:都有哪些进程间通信方式?麻烦你不要再背了

    1 管道 学习软件工程规范的时候,我们知道瀑布模型,在整个项目开发过程分为多个阶段,上一阶段的输出作为下一阶段的输入.各个阶段的具体内容如下图所示 最初我们在学习Linux基本命令使用的时候,我们经常 ...

  7. IPC 进程间通信方式——管道

    进程间通信概述 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间 共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到. 通知时间: ...

  8. 进程间通信方式有哪些-Linux进程间通信

    进程间通信:(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息: 进程间的通信方式: 管道(包括无名管道和命名管道).消息队列.信号量.共享内存.套接口. ...

  9. Android——进程间通信方式

    0. 前置知识 其实android中追根溯源只有两种进程间通信方式,其他的方式都是通过封装这两种方式而得到的: Binder与Socket Android--Binder机制. Android中Soc ...

最新文章

  1. Wince 启动程序并最小化
  2. 十三: 悲观锁乐观锁:解决丢失更新问题
  3. mysql行列转换_Excel、SQL、Python分别实现行列转换
  4. 开放域知识库问答研究回顾
  5. CodeForces - 1359C Mixing Water(三分)
  6. how is batch operation handled in backend
  7. [转]CentOS 7忘记root密码解决办法
  8. c# oracle datasource,C# 连接Oracle 数据库 示例源码下载
  9. mysql导入数据提前修改字段_复习MySQL③导入数据、检查及修改
  10. ElasticSearch(二十四)基于scoll技术滚动搜索大量数据
  11. 使用gpio输出驱动蜂鸣器出现破音_探索者 STM32F407 开发板资料连载第七章 蜂鸣器实验...
  12. post postman 传递数组对象_okhttp传递数组参数
  13. 电脑锁屏按什么键解锁_锁屏键除了锁屏还能干什么?这 6 个 App 带你玩转手机实体键...
  14. sizeof计算结构体时的内存对齐问题
  15. MongoDB的性能优化
  16. 行业领先!5G投资1100亿! 20个中国移动5G成功案例分享( 业绩+案例 )
  17. 内存碎片的定义、种类、产生原因以及解决办法
  18. python开发平台介绍_【Python 入门】简介与搭建开发环境
  19. VC6.0 TeeChart5.ocx注册
  20. Java通俗易懂30天 第1天: Java语言概述

热门文章

  1. 区块链生命链_大都会人寿首创“生命链”技术 区块链应用再结硕果
  2. 【HaaS Python 硬件积木】粉尘传感器
  3. 郁闷的会计(非负整数转换成大写金额的拼音)
  4. 人们通常先在线性表尾部临时添加一个_视频号——企业争夺的下一个爆款红利...
  5. 关于Importerror:Filepath looks like a hdf5 file but h5py is not available 解决
  6. 黑马程序员Java零基础视频教程(2022最新Java)B站视频学习笔记-Day11-ArrayList集合
  7. 跟我学雨林木风系统制作——1.简介
  8. 谷歌词霸和有道词典的使用体会
  9. UIPro实例讲解之QQ2014 UI模仿系列四
  10. 怎样把网页保存为pdf?+如何删除pdf上面的某些东西