【操作系统】聊聊进程间通信方式

2023-09-16 10:59:00

作为操作系统软件治理的核心 进程,那么进程间通信的方式就非常重要,常见的比如管道、消息队列、共享内存、信号量、信号、Socket等。本篇主要简单介绍下

我们知道每个进程都有自己独立的用户空间,而内核空间是共享的。
在这里插入图片描述

管道

ps -ef | grep mysql 其中的 | 就是一个管道符,只能进行单向传输数据。

mkfifo myPipe  创建一个管道
echo "hello" > myPipe   写入
cat < myPipe 读取

管道通信效率低,不适合进程间频繁的交换数据。
创建一个匿名管道,一个是管道的读取端描述符fd[0],另一个是管道的写入端描述符fd[1],只存在内存中。
在这里插入图片描述
管道就是内核里的一串缓存,写入的数据存储在内核中,另一个进程读取数据也是从内核中读取。只能在父子进程或者兄弟进程中使用。

消息队列

管道的通信方式效率比较低,管道不适合进程间频繁交换数据,消息队列可以解决这个问题。通过进程A写入消息队列后,B异步的进行读取。
但是消息队列本身是保存在内核中的消息链表中,主要有几点,消息的数据格式,消息序列化、反序列化等。

消息队列本身通信不及时,附件也有大小限制,并且不适合传输较大的文件,需要在内核态和用户态之间来回数据拷贝。这个比较耗费资源。而零拷贝本质就是为了减少这种开销。

共享内存

消息队列本身有内核态到用户态的开销,共享内存可以解决,不同的进程通过虚拟内存映射到不同的物理地址上,那么开通一块公共区域,进程时间可以通过直接访问,就可以减少这种开销,提升通信速度。

在这里插入图片描述

信号

在这里插入图片描述
我们知道 结束一个进程通过可以kill -9 pid,但是为什么就可以呢,其实就是通过信号给进程发送一个结束该进程的通知。
而ctrl+c sigint 终止进程 、ctrl+z 停止进程。

信号是进程间通信机制中唯一的异步通信机制

socket

以上介绍的其实只局限于本机进程通信,但是想要实现不同机器之间通信 可以使用socket套接字。主流的两种其实就是UDP和TCP。

在这里插入图片描述
这里简单说以下TCP的方式

1.客户端和服务端都进行创建socket
2.服务端调用bind,将绑定在IP和端口上
3.服务端调用listen,进行监听
4.服务端调用accept,等得客户端连接。
5.客户端调用connect 建立连接
6.客户端写入数据,服务端读取数据
7.断开连接,调用close,服务端读取到EOF,处理完毕后,服务端调用close,表示连接关闭。

更多推荐

爱看小说手机网源码全站带数据带自动采集程序/ThinkPHP内核小说网站源码+书库数据库带自动采集

爱看小说手机网源码全站带数据带自动采集程序,爱看小说程序源码+2W条数据全站打包,自动采集程序网站源码,后台已经更新5个采集规则可以采集小说30万本大概约10G。分享的这一款自带2w数据爱看小说网源码全站带数据打包,ThinkPHP内核小说网站源码带听书等全部插件,而且还带了采集规则,可以拿去测试!做好数据多更新数据,

使用Python 3脚本自动化Harbor镜像复制

介绍:在容器化应用程序的世界中,Docker镜像是构建和部署的核心。许多组织使用Harbor作为他们的镜像仓库管理解决方案。但有时候,需要将镜像从一个Harbor仓库复制到另一个,这可能会是一个繁琐的任务。为了简化这个过程,我们将介绍如何使用Python脚本来自动化这个任务。这个脚本将从源Harbor仓库中复制镜像,并

Linus Torvalds接受来自微软的Linux Hyper-V升级

导读微软最近推送了一些变更,旨在改进即将发布的Linux内核6.6版本对Hyper-V的支持。这些改进包括在Hyper-V上支持AMDSEV-SNPguest和IntelTDXguest。除了这两项,还有其他一些升级,如改进了VMBus驱动程序中的ACPI(高级配置和电源接口)根对象处理等。Linux领头人LinusT

LeetCode刷题---Add Two Numbers(一)

文章目录🍒题目🍒解法一迭代🍒解法二递归🍒递归小案例🍒迭代VS递归🍒题目给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之外,这两个数都不会以0开头。本道题,我们采用两个主流的思

MySQL-Linux安装、卸载:

MySQL8.0.26-Linux版安装1.准备一台Linux服务器云服务器或者虚拟机都可以;Linux的版本为CentOS7;2.下载Linux版MySQL安装包https://downloads.mysql.com/archives/community/3.创建目录,上传MySQL安装包/usr/local/src

能ping通但无法上网的问题

大家好,今天我要和大家分享一下当你的IP地址能够成功ping通,却无法上网时该如何解决这个问题。这是一个相当常见的情况,在网络故障排查中经常遇到。别担心,我将为你揭开这个谜题,提供一些解决方案和技巧。首先,我们需要了解一下可能导致这种问题的原因。通常情况下,当你的IP地址能够成功ping通,这意味着你的计算机能够与目标

阿里云服务器经济型e实例租用价格和CPU性能测评

阿里云服务器ECS推出经济型e系列,经济型e实例是阿里云面向个人开发者、学生、小微企业,在中小型网站建设、开发测试、轻量级应用等场景推出的全新入门级云服务器,CPU采用IntelXeonPlatinum架构处理器,支持1:1、1:2、1:4多种处理器内存配比,e系列性价比优选,新品e实例价格低至15元/月,折合0.5元

小白备战大厂算法笔试(八)——搜索

搜索二分查找二分查找是一种基于分治策略的高效搜索算法。它利用数据的有序性,每轮减少一半搜索范围,直至找到目标元素或搜索区间为空为止。Question:给定一个长度为n的数组nums,元素按从小到大的顺序排列,数组不包含重复元素。请查找并返回元素target在该数组中的索引。若数组不包含该元素,则返回−1双闭区间如下图所

css知识学习系列(6)-每天10个知识点

目录1.**CSS中的“box-sizing”属性与“border”属性有什么关系?**2.**在CSS中,如何使用“calc()”函数进行计算?有什么使用技巧?**3.**在CSS中,如何使用“@import”引入外部样式表?有哪些注意事项?**4.**Flexbox和Grid布局在实践中哪个更常用?为什么?**5.

【学习笔记】Java 一对一培训(2.2)Java基础逻辑

【学习笔记】Java一对一培训(2.2)Java基础逻辑关键词:Java、SpringBoot、Idea、数据库、一对一、培训、教学本文主要内容含Java逻辑运算、Java循环语句、Java常见工具类、Java常见数据结构、Java文件操作、封装继承多态计划2.5小时完成,请同学尽量提前准备。本部分主要代码实战!有学习

如何提升LED显示屏显示效果?

影响LED显示屏显示效果的因素有很多,以下是一些主要的因素:LED灯珠的质量和性能:LED灯珠是LED显示屏的核心组件,其质量和性能会直接影响到整个LED显示屏的显示效果。显示屏的亮度:LED显示屏的亮度是影响显示效果的一个重要因素。如果亮度过低,显示图像就会模糊不清,而如果亮度过高,则可能会引起屏幕反射和眩光等问题。

热文推荐