进程通信(IPC,Inter-Porcess Communcation)是进程进行通信和同步的机制。

IPC提供两个基本操作:

  1. 发送(send message)
  2. 接收(receive message)

进程通信流程:

  • 在通信进程之间建立通信链路
  • 通过send/receive交换信息

进程通信方式:

直接通信:
进程必须正确命名对方,比如send(p,message)向p发送信息,receive(q,message)从q中接收信息
通信链路有如下属性:自动建立连接;一条链路恰好对应一对通信进程;每对进程之间只有一个链接存在;链路可以是单向的,但是通常为双向的

间接通信:
通过OS维护的消息队列实现进程之间的通信(接收发送信息)
每个消息队列都有一个唯一标识,只有共享了相同消息队列的进程才能够通信
通信链路有如下属性:只有共享了相同消息队列的进程才能建立连接,比如send(a,message)向消息队列a发送信息,receive(a,message)从消息队列a中接收信息 ;连接单向或者双向;消息队列可以与多个进程相互关联;每个进程共享多个消息队列(也就是进程和消息队列是多对多的关系)

阻塞通信(同步)与非阻塞通信(异步)

同步通信:

阻塞发送:发送者发送消息后进入等待(阻塞)直到接受者成功接受
阻塞接收:接收者请求接收信息后等待(阻塞)直到成功接受一条消息

异步通信:

非阻塞发送:发送者发送消息后,可立即进行其他操作
非阻塞接收:接收者请求接收信息后,如果没有消息发送就接收不到信息,不需要等待

通信链路缓冲:

  1. 0容量:发送方必须等待接受方
  2. 有限容量:缓冲队列满,发送方必须等待
  3. 无限容量:发送方不需要等待


上面是关于IPC通信的基本概念,下面我们看一看一些常见的进程通信方式。

MOOC讲了四种进程通信方式:

信号,管道, 消息队列, 共享内存,由于都是基本概念,我偷个懒直接复制下来了:


信号:


管道:


消息队列:


共享内存:

进程通信概念和进程通信方式相关推荐

  1. Linux——(管道练习)C实现父子进程通信、兄弟进程通信、多个读写端操作管道及管道缓冲区大小、fifo实现非血缘间进程通信

    一. 父子进程通信 lswc-l 父进程ls写到管道,子进程wc管道的内容 父进程创建管道(拥有读写两端),父进程fork子进程,父进程要将原本输出到屏幕上的内容输出到管道中,用dup实现,然后exe ...

  2. linux进程通信1:进程通信概述,管道通信原理(无名管道,有名管道),管道编程实战

    进程通信概述,管道通信原理(无名管道,有名管道),管道编程实战 1.进程间通信概述: 举例1: 你手机微信和别人手机微信通信 举例2: 如:父子进程wait 和 exit之间的通信 进程间通信(IPC ...

  3. Linux 进程通信fifo,Linux 进程通信之FIFO的实现

    FIFO通信(first in first out) FIFO 有名管道,实现无血缘关系进程通信. 创建一个管道的伪文件 a.mkfifo testfifo 命令创建 b.也可以使用函数int mkf ...

  4. linux 创建精灵进程,linux 进程通信之 守护进程

    守护进程(Daemon) Daemon(精灵)进程,是linux中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的时间.一般采用以d结尾的名字.从下面的进程信息可以看出, ...

  5. mysql进程通信_事务(进程 ID 70)与另一个进程被死锁在 锁 | 通信缓冲区 资源上,并且...

    访问一个内部调研页面,打开第二次就死锁了,搜索了一下,一种可能的情况类似下面这种场景,SQLServer中似乎嵌套的SQL语句会造成死锁,用nolock hint可以解决这个问题. update  t ...

  6. Android开发之跨进程通信-广播跨进程实现方法(附源码)

    真的特别简单,简单概述下android的四大组件都可以跨进程. Activity,广播,服务,内容提供者都可以 先看下跨进程传递数据的效果图 下面是两个APP用于模拟跨进程 再看下跨进程效果,AIDL ...

  7. TCP与UDP协议初步学习——网络环境中分布式进程通信的基本概念

    TCP与UDP协议初步学习--网络环境中分布式进程通信的基本概念 一.单机系统中进程通信方法 进程和进程通信是操作系统中最基本的概念,首先通过回忆操作系统课程中,关于单击系统中进程和进程通信的问题描述 ...

  8. 【Binder】Android 跨进程通信原理解析

    前言 在Android开发的过程中,用到跨进程通信的地方非常非常多,我们所使用的Activity.Service等组件都需要和AMS进行跨进程通信,而这种跨进程的通信都是由Binder完成的. 甚至一 ...

  9. linux一个进程通知另外一个进程,Linux进程通信学习笔记

    一.为什么需要进程通信 1)数据传输 一个进程需要把它的数据发送给另一个进程. 2)资源共享 多个进程之间共享同样的资源. 3)通知事件 一个进程向另外一个进程发送消息,通知它发生了某事件. 4)进程 ...

最新文章

  1. 什么是启发式?什么是产生式?
  2. 第8章6节MonkeyRunner启动运行过程-启动Monkey 4
  3. Python关于文本中标点符号及其他的替换
  4. Platform Builder 6.0与Windows 7兼容性的问题
  5. KVM虚拟机的优化历程---按需优化
  6. linux安装weblogic9,linux_weblogic9_安装说明.doc
  7. 信管专业c语言考什么,计算机信息管理专业卫生事业单位招聘考试笔试模拟题(十)...
  8. linux硬件配置_Linux硬件配置
  9. 网盘工具比较,以及自己开发的网盘工具[转]
  10. java高级语言特性_Java语言高级特性——注解
  11. day25 java的集合(2)collection
  12. mysql tnsnames.ora_tnsnames.ora配置注意(连接新的数据库)
  13. Navicate ---error 2003: can‘t connect to mysql server on ‘localhost‘(10061)“
  14. 来自 100 年前不可思议的绘画预言
  15. gamit如何添加新的天线类型
  16. es文件浏览器访问ftp服务器,es文件浏览器如何ftp服务器
  17. fafa什么意思_fafafafafa 什么意思
  18. 最安全的邮箱大全排名,公司安全邮箱申请如何设置?
  19. delphi php post,delphi idhttp post 网页,该如何解决
  20. 环游西游看项目管理(附上项目管理工具)

热门文章

  1. 关于SecureCRT工具的使用
  2. 一套完整的投资体系:判断好生意、发现好公司、找到好价格
  3. 警告!从ISO映像创建的U盘可能无法完全启动!Unknown引导扇区不支持NTFS文件系统
  4. ellipse 标签
  5. 使用 wpa_supplicant
  6. 相干光和非相干光的区别
  7. HTML5+CSS3小实例:菜单栏图标悬停效果
  8. allennlp与pytorch版本匹配
  9. 解决找不到gpedit.msc文件方法
  10. CmakeList中加入OpenCV编译项