进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。但是,系统空间却是“公共场所”,所以内核显然可以提供这样的条件。除此以外,那就是双方都可以访问的外设了。在这个意义上,两个进程当然也可以通过磁盘上的普通文件交换信息,或者通过“注册表”或其它数据库中的某些表项和记录交换信息。广义上这也是进程间通信的手段,但是一般都不把这算作“进程间通信”。因为那些通信手段的效率太低了,而人们对进程间通信的要求是要有一定的实时性。

一.Linux下进程间通信的几种主要手段简介:

1.管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;

管道包括三种:1)普通管道PIPE, 通常有种限制,一是半双工,只能单向传输;二是只能在父子进程间使用. 2)流管道s_pipe: 去除了第一种限制,可以双向传输. 3)命名管道:name_pipe, 去除了第二种限制,可以在许多并不相关的进程之间进行通讯.

2.信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;Linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数);

3.报文(Message)队列(消息队列):消息队列是消息的链接表,包括Posix消息队列systemV消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。

4.共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。

5.信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。

6.套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。

二.相关问题

FAQ1:管道与文件描述符,文件指针的关系?

答: 其实管道的使用方法与文件类似,都能使用read,write,open等普通IO函数. 管道描述符类似于文件描述符. 事实上, 管道使用的描述符, 文件指针和文件描述符最终都会转化成系统中SOCKET描述符. 都受到系统内核中SOCKET描述符的限制. 本质上LINUX内核源码中管道是通过空文件来实现.

FAQ2:管道的使用方法?

答: 主要有下面几种方法: 1)pipe, 创建一个管道,返回2个管道描述符.通常用于父子进程之间通讯. 2)popen, pclose: 这种方式只返回一个管道描述符,常用于通信另一方是stdin or stdout; 3)mkpipe: 命名管道, 在许多进程之间进行交互.

FAQ3:管道与系统IPC之间的优劣比较?

答: 管道: 优点是所有的UNIX实现都支持, 并且在最后一个访问管道的进程终止后,管道就被完全删除;缺陷是管道只允许单向传输或者用于父子进程之间.

系统IPC: 优点是功能强大,能在毫不相关进程之间进行通讯; 缺陷是关键字KEY_T使用了内核标识,占用了内核资源,而且只能被显式删除,而且不能使用SOCKET的一些机制,例如select,epoll等.

FAQ4: WINDOS进程间通信与LINUX进程间通信的关系?

答: 事实上,WINDOS的进程通信大部分移植于UNIX, WINDOS的剪贴板,文件映射等都可从UNIX进程通信的共享存储中找到影子.

FAQ5:进程间通信与线程间通信之间的关系?

答: 因为WINDOWS运行的实体是线程, 狭义上的进程间通信其实是指分属于不同进程的线程之间的通讯.而单个进程之间的线程同步问题可归并为一种特殊的进程通信.它要用到内核支持的系统调用来保持线程之间同步. 通常用到的一些线程同步方法包括:Event, Mutex, 信号量Semaphore, 临界区资源等.

进程间通信那种效率最高_进程间通信的几种方式的介绍及比较相关推荐

  1. 进程间通信那种效率最高_几种进程间的通信方式 比较

    # 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系通常是指父子进程关系. # 有名管道 (named pipe) : 有名管道也 ...

  2. 进程间通信(IPC -- InterProcess Communication)的五种方式

    目录 0. 前言 1. 管道通信(Pipe) 2. 消息队列(Queue) 3. 共享内存 4. 信号量(信号灯集) 5. socket套接字 0. 前言 0.1 进程间通信的必要性 进程间空间独立, ...

  3. 编码中统一更该变量的快捷键_流媒体的7种方式使您成为更好的编码器

    编码中统一更该变量的快捷键 by freeCodeCamp 通过freeCodeCamp 流媒体的7种方式使您成为更好的编码器 (7 Ways Streaming Makes you a Better ...

  4. throws关键字_异常处理的第一种方式,交给别人处理

    package com.learn.exception;import java.io.FileNotFoundException; import java.io.IOException;/*throw ...

  5. java找零钱_求一共有多少种方式系列问题(找零钱)

    求一共有多少种方式系列问题(找零钱问题) 背景: 假设有四种面额的钱币 1 元.2 元.5 元和 10 元,一共给我 10 元 那您可以奖赏我 1 张 10 元,或者 10 张 1 元 或者 5 张 ...

  6. java 制作自定义控件_自定义控件的三种方式

    文章转载于https://blog.csdn.net/fictionss/article/details/78285167 原生控件,自己绘制和继承原生控件. 1.组合原生控件 将自己需要的控件组合起 ...

  7. 提高Web Service效率的几种方式(转)

    2008-02-20 16:01 基于SOAP的Web Service的性能一直为人诟病,由于采用 XML标准进行系统间的数据传输,加大了传输的数据量,尤其是在传输一些具有比较严格结构的数据时,会使得 ...

  8. 【操作系统】进程间通信的五种方式

    引言 1.进程对白:管道.记名管道.套接字 1.管道 2.虫洞:套接字 3.信号 4.信号旗语:信号量 5.进程拥抱:共享内存 引言 进程作为人类的发明,自然免不了脱离人类的习性,也有通信需求.如果进 ...

  9. 深刻理解linux进程间通信 pdf,深刻理解Linux进程间通信.doc

    深刻理解Linux进程间通信.doc 深刻理解 Linux 进程间通信(IPC)级别 初级 郑彦兴 国防科大计算机学院 2002 年 12 月 11 日 一个大型的应用系统,往往需要众多进程协作,进程 ...

最新文章

  1. Swift2.1 语法指南——自动引用计数
  2. java jdk的作用_jdk的作用是什么?jdk和jre区别介绍
  3. AI创想秀,邂逅“华为云ModelArts”征文大赛——第一次收官
  4. Actor-ES框架:Actor编写-ESGrain与ESRepGrain
  5. 将python中的小数直接进位的函数_python保留小数位的三种实现方法
  6. 来做网课老师不?年薪两百万,上不封顶...
  7. Python中[index for index, value in enumerate(a) if value > 3]
  8. easyUi load方法重新加载表单的数据
  9. java switch 条件_Java 条件之 switch 语句
  10. 360服务器安全加固系统,360政企安全
  11. python 模块下载资源汇总
  12. xp框架 android4.4.4,Redmi 2A高配置降级4.4.4和xposed框架安装
  13. Cookie和Session的使用及其案例分析
  14. 六相PMSM电驱平台及电机相序、参数测试流程
  15. 网页自适应手机屏幕的几种方法
  16. 计算机所需要的数学基础知识,学计算机需要什么基础 数学不好能学计算机吗...
  17. 【水汐のpython】 用python抓取外网的本子站并获取本子封面和信息
  18. Google Earth Engine——MODIS Combined 16-Day NDVI逐年合成影像循环下载
  19. 飞速创软 | 带你深入了解Iass、Pass、Sass三种云服务的区别
  20. centos7的syslog知识点

热门文章

  1. 微信小程序开发笔记(四)数据绑定
  2. 如何让背景虚化html,佳能600D如何使背景虚化
  3. 从DOOM到CE3 20年3D游戏引擎发展史漫谈
  4. 6 本软件架构书,构建你的架构知识体系
  5. 【Excel导入】关于Excel导入数据超时的一个小问题
  6. Vue实现PDF导出和打印功能
  7. 2022-09-29
  8. 滴滴发力地图了!个人导航业务正式上线,实时公交覆盖80余城
  9. 苹果旧版app_iTunes怎么下载旧版app_iTunes下载旧版app教程
  10. 2020春招:联通沃音乐 信息安全岗