首页 > 系统相关 >进程间的通信方式三种

进程间的通信方式三种

时间:2023-02-24 06:22:18浏览次数:32  
标签:读取 队列 通信 管道 三种 进程 共享内存

进程间的通信方式三种分别是消息队列通信信号量通信共享内存通信,还有管道、Scoket。下面我们具体来了解一下这5种方式。

 

1、消息队列是在两个不相关的进程之间传递数据的一种简单高效的方式,独立于发送进程和接受进程而存在。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。在内核中创建一队列,队列中每个元素是一个数据报,不同的进程可以通过句柄去访问这个队列;消息队列独立于发送与接收进程,可以通过顺序和消息类型读取,也可以fifo读取;消息队列可实现双向通信。

 

 

 

 2、信号量是一种提供不同进程或者一个给定的不同线程之间同步的手段。它常作为一种锁机制,防止进程访问共享资源时,其他的进程也访问该资源。主要作为进程之间以及同一进程内的不同线程之间的同步手段。

  

 

 

3、共享内存是指在多个处理器的计算机中,可以被不同的中央处理器访问的大容量的内存。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低的问题专门设计的。它往往与其他通信机制配合使用,来实现进程间的同步通信。

将同一块物理内存一块映射到不同的进程的虚拟地址空间中,实现不同进程间对同一资源的共享。目前最快的IPC形式,不用从用户态到内核态的频繁切换和拷贝数据,直接从内存中读取就可以,共享内存是临界资源,所以需要操作时必须要保证原子性。使用信号量或者互斥锁都可以。

 

 

 4、管道分为命名管道和无名管道,在内核中申请一块固定大小的缓冲区,程序拥有写入和读取的权利,都可以看成一种特殊的文件,具有固定的读端和写端,也可以使用普通的read、write 等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中;无名管道一般使用fork函数实现父子进程的通信,命名管道用于没有血缘关系的进程也可以进程间通信;面向字节流、自带同步互斥机制、半双工,单向通信,两个管道实现双向通信。

以上就是对三种通信方式的具体介绍。

5、socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据。socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种”打开—读/写—关闭”模式的实现,服务器和客户端各自维护一个”文件”,在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。是一种可以网间通信的方式。

摘自:

https://baijiahao.baidu.com/s?id=1720080267991353862&wfr=spider&for=pc

https://mp.weixin.qq.com/s?__biz=MjM5NzEyMzg4MA==&mid=2649423819&idx=3&sn=13a467712e6425576c7b6220580788aa&chksm=bec09d8c89b7149a2f27a6e29e67a17b241902b3686008258f34e0ccf9a883caedb6b4814b71&scene=27

标签:读取,队列,通信,管道,三种,进程,共享内存
From: https://www.cnblogs.com/sword0077/p/17150034.html

相关文章

  • 54.函数传递参数的三种方式
    #define_CRT_SECURE_NO_WARNINGS#include<iostream>usingnamespacestd;//值传递voidswap(inta,intb){ inttmp=a; a=b; b=tmp;}//指针传递void......
  • Nano SIM 卡引脚定义//京鸿通信科技(深圳)有限公司 www.kyohoon.com 15507589165
    前言想做个接口板,将第三方的4G模块接进来.先查了下SIM卡的引脚定义,这样就可以将硬件接口先定下来,板子可以分开作。  作为接口板,只需要引出以下引脚:电源接口VCC/GN......
  • linux下进程通信总结
    信号:信号是通知发生了某种事件的机制,内核和进程都可能会向进程发送各种信号,进程也可以向自己发送信号。系统定义了一组标准信号类型,每种信号都拥有唯一的数值和用途。......
  • 从0到1一步一步玩转openEuler--23 openEuler管理进程-查看进程
    操作系统管理多个用户的请求和多个任务。大多数系统都只有一个CPU和一个主要存储,但一个系统可能有多个二级存储磁盘和多个输入/输出设备。操作系统管理这些资源并在多个用户......
  • 阿里云云通信风控系统的架构与实践
    作者:铭杰阿里云云通信创立于2017年,历经5年发展已经孵化出智能消息、智能语音、隐私号、号码百科等多个热门产品。目前,已成为了国内云通信市场的领头羊,在国际市场上服......
  • Supervisor-进程管理工具
    1.简介Supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具。可以很方便的监听、启动、停止、重启一个或多个进程。用supervisor管理......
  • 进程与线程
    进程Hello.java编译并运行Hello.javajps查询java当前运行的进程24900Hello表示名为Hello的进程正在运行关闭运行Hello.java的cmd后再查询jpsHello进程消失了......
  • Node.js:pm2管理进程启动npm run dev和开机自启
    Node.jsProductionProcessManagerwithabuilt-inLoadBalancer.文档官网https://pm2.keymetrics.io/githubhttps://github.com/Unitech/pm2安装npminsta......
  • 编写多进程编程
    实验内容:有3个进程,其中一个为父进程,其余两个是该父进程创建的子进程,其中一个子进程运行"ls-l"指令,另一个子进程暂停5s之后异常退出,父进程先用阻塞方式等待第一子进程的结......
  • vue3祖孙组件间通信
    作用:实现祖孙组件间通信父组件有一个provide选项来提供数据,子组件有一个inject选项来开始使用这些数据具体写法:1.祖组件中:setup(){letcar=reactive({na......