# 管道( pipe

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

# 有名管道 (named pipe) :

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

# 信号量( semophore ) :

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

# 消息队列( message queue ) :

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

# 信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

# 共享内存( shared memory )

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

方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。

# 套接字( socket ) :

套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

1,管道:根植于文件系统,管道一端读,一端写,只可以在父子进程间共享。父子进程有同一个文件标号(内核中file数组的下标),但是指向的file结构是不同的(file结构和具体的进程相关)。而file结构又指向一个dentry结构,这个dentry结构是同一个,dentry结构又指向一个inode结构(以上都是在内核中)。父进程发送消息,系统从用户态转到内核态,内核调用inode结构中的函数操作指针(具体的函数实现由虚拟文件系统下面的具体的文件系统实现),数据写入inode结构的缓存。内核在找到子进程的task_struct结构,添加标志告诉子进程有数据发送过来了,子进程由阻塞进度就绪。此时父进程进入就绪阶段。内核根据调度算法找到一个进程执行。不久,子进程被选择执行,同样的流程找到inode结构,读取缓存数据。这样,一个完整的进程通信完成了。

2,命名管道:匿名管道是根据相同的文件fd找到对方,而命名管道是根据相同的文件名字。因此只要预定了文件名就可以通信,从找到file结构开始,过程都类似。都是根植于虚拟文件系统。不同于块文件和字符文件,命名管道是一种特殊的文件系统FIFO队列,因此不可以定位指针。

3,信号:信号时一种异步的通信方式。一个进程向另一个进程发送信号,系统从用户态进入内核态,内核根据接收进程的id找到其task_struct,把发送的信号放入接收进程队列。若干时刻过后,接收进程运行,运行一段时间后,接收进程需要用到内核服务,所以通过系统调用(异常或者中断)进入内核态,内核首先找到进程的信号队列,进入用户态,处理信号处理程序。处理完之后,再次进入内核态,找到信号处理前的指令,一切恢复正常,就好像没有信号处理一样。信号处理程序和主程序就好像是两个不同线程,共享进程的用户空间,却没有方法同步。信号处理程序不可能中断执行阻塞然后又转到主程序执行。信号处理程序的优先级高,但是指向条件苛刻。

4,共享内存:共享内存其实是不同进程的同一个物理页面,虽然虚拟内存地址不同。甲进程往共享内存写数据,乙进程也可以访问。共享内存可以不涉及内核操作,但是需要同步和通知控制。比如可以用信号来实现通知。

5,报文传递:不同于管道通信,每个进程都有一个报文队列,而每个报文都是一个有结构的数据。相对来说,管道只是一个字符流。管道通信缓冲区满之后,发送进程就会阻塞,报文不会。报文不是根植于文件系统。

6,信号量:很简单的通信方式,再访问一段内存的时候查看某一个信号是否可以访问,访问,关闭,保证同一时刻只有一个进程访问这段内存。如此......

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

  1. 1、几种进程间的通信方式

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

  2. 进程间通信那种效率最高_进程间通信的几种方式的介绍及比较

    进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区.但是,系统空间却是" ...

  3. 几种进程间的通信方式

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

  4. 2022-2-21 操作系统八股之七 —— 进程间的通信方式有哪些?

    进程 ( InterProcess Communication )间通信是指在不同进程间传播或者交换信息.进程间通信的方式有:管道(有名管道和匿名管道).消息队列.信号量.共享内存.Socket.St ...

  5. step4 . day7 进程间的通信方式

    进程间的通信方式: 无名管道(pipe) 有名管道 (fifo) 信号(signal) system v5的进程间通信方式 共享内存(share memory) 消息队列(message queue) ...

  6. unix进程间的通信方式

    unix进程间的通信方式 (1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信. (2)命名管道(named pipe):命名管道克服了管道 ...

  7. 共享内存(进程间的通信方式)

    目录 1.共享内存的特点 2.函数接口 3.有关共享内存的系统命令 1.共享内存的特点 (1)共享内存是一种最高效的进程间的通信方式,进程可以直接读写内存,而进程之间不需要通过任何数据的拷贝. (2) ...

  8. msgget();msgsnd();msgrcv();msgctl(); 消息队列 Linux进程间的通信方式之消息队列

    Linux进程间的通信方式 ----消息队列. 消息队列和共享内存类似 消息队列它允许一个或多个进程向它写消息,一个或多个进程向它写读消息. 消息队列存在于系统内核中,消息的数量受系统限制. 我们来看 ...

  9. 进程间的通信方式 8种

    进程通信: 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从 ...

最新文章

  1. C++动态二维数组演示的代码
  2. 网站提示java已被阻止_Win7系统下打开网页提示应用程序已被JAVA安全阻止
  3. 【PAT乙级】1070 结绳 (25 分)
  4. mysql 5.7.15 union order by 子查询排序不生效
  5. java htmlparser 使用教程_HTMLParser使用详解(1)
  6. mysql5.6 主从_mysql5.6 主从配置
  7. k3s 部署, 使用注意事项
  8. StringUtils工具类常用方法
  9. webpack 介绍 安装 常用命令
  10. html使用表格输入数字,表格中输入数字,为什么出现“####”的原因
  11. 上海财经应用统计考python_2021年上海财经大学应用统计硕士考研经验分享
  12. 2018年计算机网络统考考试试题,2018年下半年网络工程师考试上午试题及答案
  13. 转载:王垠 的《完全用Linux工作》
  14. html标题(heading)
  15. 得物购买截图生成_iPhone12订单生成器网页版-iPhone12订单生成器网页版链接分享预约 v1.0...
  16. UVA 1647 Computer Transformation
  17. Qt-QPixmap
  18. 如何自己制作小程序?
  19. 哪些IC设计公司会在CMMB竞争中突围?
  20. 2019创业新项目手游充值代理是骗人的还是风口?

热门文章

  1. 【Codeforces 1349A】Orac and LCM
  2. linux wubi安卓,安卓搜狗输入法升级:五笔前所未有的爽!
  3. 坑!页面短视频加载又卡又慢?阿里P8大佬教你两套办法秒开短视频!
  4. sketch android xml,史上最详细Sketch Measure讲解
  5. 【干货】PS图像修复与修饰工具用法
  6. 半导体--上下游产业链
  7. matplotlib绘图3——图标辅助元素的定制
  8. 【linux】循序渐进学运维-基础篇-rpm管理
  9. PicsArt使用教程
  10. 手机java转换c语言,求助大神!!!JAVA转换成C语言