当前位置: 首页 > news >正文

广州购网站建设/网站推广做什么

广州购网站建设,网站推广做什么,无锡网站建设哪家好,网站建设好做吗目录一、管道的理解二、匿名管道三、命名管道四、管道的通信流程五、管道的特性进程间通信方式有多种,本文介绍的是管道,管道分为匿名管道和命名管道。 一、管道的理解 生活中的管道用来传输资源,例如水、石油之类的资源。而进程间通信的管道…

目录

  • 一、管道的理解
  • 二、匿名管道
  • 三、命名管道
  • 四、管道的通信流程
  • 五、管道的特性

  进程间通信方式有多种,本文介绍的是管道,管道分为匿名管道和命名管道。

一、管道的理解

  生活中的管道用来传输资源,例如水、石油之类的资源。而进程间通信的管道传输的是数据,管道的使用场景就是数据传输

管道的特性:

  • 半双工通信
  • 先进先出

  半双工通信:数据可以沿两个方向发送,但是同一时间一个管道中只允许向一个方向发送数据,也可以称之为可以选择方向的单向通信。但实际使用管道的时候,方向一旦确定就不再更改了。就类似于家里的自来水管,自来水只会从水厂传输到家里,而不是从家里把水传输到水厂。

  先进先出:先发送的数据先被接收,数据的发送顺序就是数据的接受顺序,就像队列一样,先进先出。(注意:管道中数据不能一直无限的写入,是有大小限制的)

  如图:发送顺序是:1、2、3、4,接受顺序也是:1、2、3、4。

管道示意图

管道的本质:

  内核中的一块缓冲区,而缓冲区就是内核空间中的一块内存,这块内存被用来进行进程间通信。

管道的分类:

  • 匿名管道
  • 命名管道

二、匿名管道

理解匿名管道:

 (1)内核中的缓冲区(也就是管道)没有标识符(注意和文件标识符区分开,这两不是一个东西),只能用于具有亲缘关系的进程间通信。

 (2)因为标识符是一个管道的名字,一个管道如果没有名字,自然就是匿名管道。

匿名管道如何实现具有亲缘关系的进程间通信?

 (1)在Linux中,系统在操作管道的时候,是把管道当作文件来进行操作的,因此管道都有对应的文件描述符。父进程先创建匿名管道,然后再创建子进程,这样父子进程就可以使用这个匿名管道来通信。

 (2)因为父进程创建了匿名管道后,系统是把这个管道当作文件进行处理的,因此会有对应的文件描述符(文件描述符就是一个文件在fd_arr数组中的下标),文件描述符会占据数组中的最小未使用的下标。

 (3)父进程创建子进程后,子进程会复制父进程pcb中的大部分信息,其中就包含了fd_arr[]数组,因此子进程也会得到文件描述符的相关信息。虽然子进程会初始化页表和虚拟空间,但不会修改pcb中和IO相关的信息。

 (4)子进程复制fd_arr[]数组后,也就知道了这个管道的操作句柄,有了这个操作句柄,父子进程就可以访问同一个匿名管道了。

匿名管道原理

三、命名管道

理解命名管道:

 (1)内核中缓冲区具有标识符,也就是这个管道有名字。

 (2)标识符是一个可见于文件系统的特殊管道文件,多个进程通过打开同一个标识符文件,就可以访问同一块内核中的缓冲区(命名管道)。

  如图:管道文件标识符test.fifo(这是一个文件),进程通过这个文件来访问内核中的缓冲区(命名管道)。即便是没有亲缘关系的进程,也可以通过它来访问内核中的同一块缓冲区(命名管道)。

命名管道原理

四、管道的通信流程

  进程A要把数据通过管道发送给进程B,就首先要把数据拷贝一份放到内核空间的管道中(第一次拷贝)。然后进程B从内核空间的管道中把这个数据再拷贝一次带回来(第二次拷贝),这样才能拿到这个数据。

  因此使用管道传输数据时,需要经历两次拷贝

数据流向

五、管道的特性

  1. 管道中的数据是一次性的,读取后就没有了,空间就被腾出来了。
  2. 如果管道中没有数据,读端(read)默认会阻塞,直到读取到了数据后才会返回。
  3. 如果管道中数据写满了,写端(write)默认会阻塞,直到数据被读出,管道中有了空闲空间才可以继续写入数据。
  4. 管道的读写是一种字节传输服务,数据会在缓冲区堆积,并且遵循先进先出原则(类似于队列的先进先出)。
  5. 如果管道所有写端被关闭,读端(read)读完所有数据后,如果继续读取数据将不再是阻塞而是返回0。(管道中read返回0,最主要表示没人写数据了,你继续等着读数据没啥意义)
  6. 若管道所有读端被关闭,写端(write)继续写入数据,则触发异常,退出程序。
  7. 管道在写入数据时,如果数据大小不超过PIPE_BUF大小,保证原子操作,防止数据混乱。(原子操作:要么这个操作一次性完成无法被打断,要么不做这个操作)
  8. 自带同步与互斥,使得数据的读取和写入更加合理。
  9. 生命周期随进程,当进程结束后,管道也就会被关闭。

  注意:如果父子进程都打开了这个管道,那么只有当父子进程对于这个管道的写端全都被关闭,读端在读完缓冲区后,才会返回0。

相关文章:

Linux IPC:匿名管道 与 命名管道

目录一、管道的理解二、匿名管道三、命名管道四、管道的通信流程五、管道的特性进程间通信方式有多种,本文介绍的是管道,管道分为匿名管道和命名管道。 一、管道的理解 生活中的管道用来传输资源,例如水、石油之类的资源。而进程间通信的管道…...

阿里研发工程师JAVA暑期实习一面

文章目录先说一下我自己的情况面试过程总结先说一下我自己的情况 我就读于湖南大学,软件工程专业,现在大三下 很巧的是,我在大二的时候就在相同的时间面过相同的部门和相同的岗位,所以我没有做笔试就直接让我去面试了。我当时还纳…...

第十四届蓝桥杯三月真题刷题训练——第 11 天

目录 第 1 题:卡片 题目描述 运行限制 第 2 题:路径_dpgcd 运行限制 第 3 题:字符统计 问题描述 输入格式 输出格式 样例输入 样例输出 评测用例规模与约定 运行限制 第 4 题:费用报销 第 1 题:卡片 题…...

机器学习入门——线性回归

线性回归什么是线性回归?回归分析:线性回归:回归问题求解单因子线性回归简单实例评估模型表现可视化模型展示多因子线性回归什么是线性回归? 回归分析: 根据数据,确定两种或两种以上变量间相互依赖的定量…...

Microsoft Word 远程代码执行漏洞(CVE-2023-21716)

本文转载于: https://mp.weixin.qq.com/s?__bizMzI5NTUzNzY3Ng&mid2247485476&idx1&sneee5c7fd1c4855be6441b8933b10051e&chksmec535547db24dc516d013d3d76097e985aaad7f10f82f15b4e355a97af75fd333acdab6232af&mpshare1&scene23&srci…...

Android kotlin 系列讲解(数据篇)SharedPreferences存储及测试

文章目录 一、什么是SharedPreferences1、将数据存储到SharedPreferences中2、从SharedPreferences中读取数据二、登录使用SharedPreferences一、什么是SharedPreferences SharedPreferences是使用键值对的方式来存储数据的。也就是说,当保存一条数据的时候,需要给这条数据提…...

一文了解Web Worker

一、概述 众所周知,JavaScript最初设计是运行在浏览器中的,为了防止多个线程同时操作DOM带来的渲染冲突问题,所以JavaScript执行器被设计成单线程。但是随着前端技术的发展,JavaScript要处理的工作也越来越复杂,当我们…...

接口文档包含哪些内容?怎么才能写好接口文档?十年测试老司机来告诉你

目录 接口文档结构 参数说明 示例 错误码说明 语言基调通俗易懂 及时更新与维护 总结 那么我们该如何写好一份优秀的接口文档呢? 接口文档结构 首先我们要知道文档结构是什么样子的。接口文档应该有清晰明确的结构,以便开发人员能快速定位自己需…...

java面试八股文之------Java并发夺命23问

java面试八股文之------Java并发夺命23问👨‍🎓1.java中线程的真正实现方式👨‍🎓2.java中线程的真正状态👨‍🎓3.如何正确停止线程👨‍🎓4.java中sleep和wait的区别👨‍…...

CANoe中使用CAPL刷写流程详解(Trace图解)(CAN总线)

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe&…...

【MySQL】002 -- 日志系统:一条SQL更新语句是如何执行的

此文章为《MySQL 实战 45 讲》的学习笔记,其课程链接可参见:MySQL实战45讲_MySQL_数据库-极客时间 目录 一、日志系统 1、重做日志:redo log(引擎层) 2、归档日记:binlog(Server层) …...

C++---背包模型---数字组合(每日一道算法2023.3.14)

注意事项: 本题是"动态规划—01背包"的扩展题,优化思路不多赘述,dp思路会稍有不同,下面详细讲解。 题目: 给定 N个正整数 A1,A2,…,AN,从中选出若干个数,使它们的和为 M,…...

并查集(不相交集)详解

目录 一.并查集 1.什么是并查集 2.并查集的基本操作 3.并查集的应用 4.力扣上的题目 二.三大操作 1.初始化 2.查找 3.合并 三.省份数量 1.题目描述 2.问题分析 3.代码实现 四.冗余连接 1.题目描述 2.问题分析 3.代码实现 一.并查集 1.什么是并查集 并查集&…...

10个最频繁用于解释机器学习模型的 Python 库

文章目录什么是XAI?可解释性实践的步骤技术交流1、SHAP2、LIME3、Eli54、Shapash5、Anchors6、BreakDown7、Interpret-Text8、aix360 (AI Explainability 360)9、OmniXAI10、XAI (eXplainable AI)XAI的目标是为模型的行为和决定提供有意义的解释,本文整理…...

final关键字:我偏不让你继承

哈喽,小伙伴们大家好,我是兔哥呀,今天就让我们继续这个JavaSE成神之路! 这一节啊,咱们要学习的内容是Java所有final关键字。 之前呢,我们学习了继承,这大大提高了代码的灵活性和复用性。但是总…...

8大主流编程语言的适用领域,你可能选错了语言

很多人学编程经常是脑子一热然后就去网上一搜资源就开始学习了,但学到了后面发现目前所学的东西并不是自己最喜欢的,好像自己更喜欢另一个技术,感觉自己学错了,于是乎又去学习别的东西。 结果竹篮打水一场空,前面所付…...

关于Python库的问题

关于Python库的问题 问题1: ModuleNotFoundError: No module named ‘requests’ Python库 Pycharm使用Requests库时报错: No module named requests’解决方法 未安装requests库,使用"pip install requests"命令安装 依然提示P…...

好记性不如烂笔头(2)

概述:用来记录一些小技巧。 1.查看MyBatis执行的sql 类:org.apache.ibatis.mapping.MappedStatement方法:getBoundSql(Object parameterObject)在IDEA的Evaluate Expression查看sql:boundSql.getSql() 2.maven仓库地址为https&…...

Java for循环嵌套for循环,你需要懂的代码性能优化技巧

前言 本篇分析的技巧点其实是比较常见的,但是最近的几次的代码评审还是发现有不少兄弟没注意到。 所以还是想拿出来说下。 正文 是个什么场景呢? 就是 for循环 里面还有 for循环, 然后做一些数据匹配、处理 这种场景。 我们结合实例代码来…...

关于我拒绝了腾讯测试开发岗offer这件事

2022年刚开始有了向要跳槽的想法,之前的公司不能算大厂但在重庆也算是数一数二。开始跳槽的的时候我其实挺犹豫的 其实说是有跳槽的想法在2022年过年的时候就有了,因为每年公司3月会有涨薪的机会,所以想着看看那能不能涨(其实还是…...

从GPT到GPT-3:自然语言处理领域的prompt方法

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…...

Git代码提交规范

Git 代码规范Git 每次提交代码,都是需要写 Commit message(提交说明),否则就不允许提交。Commit message 的格式 (三部分):Heaher ----- 必填type ---必需scope --- 可选subject --- 必需Body ---- 可省略Footer ---- …...

【JavaScript速成之路】JavaScript内置对象--Math和Date对象

📃个人主页:「小杨」的csdn博客 🔥系列专栏:【JavaScript速成之路】 🐳希望大家多多支持🥰一起进步呀! 文章目录前言1,Math对象1.1,常用属性方法1.1.1,获取x的…...

(自用POC)Fortinet-CVE-2022-40684

本文转载于:https://mp.weixin.qq.com/s?__bizMzIzNDU5Mzk2OQ&mid2247485332&idx1&sn85931aa474f1ae2c23a66bf6486eec63&chksme8f54c4adf82c55c44bc7b1ea919d44d377e35a18c74f83a15e6e20ec6c7bc65965dbc70130d&mpshare1&scene23&srcid…...

ConvNeXt V2实战:使用ConvNeXt V2实现图像分类任务(二)

文章目录训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整算法设置混合精度,DP多卡,EMA定义训练和验证函数训练函数验证函数调用训练和验证方法运行以及结果查看测试热力图可视化展示完…...

【人工智能与深度学习】基于正则化潜在可变能量的模型

【人工智能与深度学习】基于正则化潜在可变能量的模型 正则化潜变量能量基础模型稀疏编码FISTALISTA稀疏编码示例卷积稀疏编码自然图像上的卷积稀疏编码可变自动编码器正则化潜变量能量基础模型 具有潜在变量的模型能够生成预测分布 y ‾ \overline{y}...

【Leetcode——排序的循环链表】

😊😊😊 文章目录一、力扣题之排序循环链表二、解题思路1. 使用双指针法2、找出最大节点,最大节点的下一个节点是最小节点,由此展开讨论总结一、力扣题之排序循环链表 题目如下:航班直达!&#…...

ChatGPT研究分享:机器第一次开始理解人类世界目录

0、为什么会对ChatGPT感兴趣一开始,我对ChatGPT是没什么关注的,无非就是有更大的数据集,完成了更大规模的计算,所以能够回答更多的问题。但后来了解到几个案例,开始觉得这个事情并不简单。我先分别列举出来&#xff0c…...

【linux】Linux基本指令(上)

前言: 在之前我们已经简单了介绍了一下【Linux】,包括它的概念,由来啊等进行了讲解,接下来我们就将正式的踏入对其的学习!!! 本文目录👉操作系统的概念1.命令的语法1.1命令介绍1.2选…...

程序员必会技能—— 使用日志

目录 1、为什么要使用日志 2、自定义日志打印 2.1、在程序中得到日志对象 2.2、使用日志对象打印日志 2.3、日志格式 3、日志的级别 3.1、日志级别的分类 3.2、日志级别的设置 4、持久化日志 5、更简单的日志输出——lombok 5.1、如何在已经创建好的SpringBoot项目中添加…...