网站空间分类/搜索引擎的网站

网站空间分类,搜索引擎的网站,湖北响应式网站制作,北京seo代理商目录 进程间通信 进程间通信目的 进程间通信的发展 进程间通信分类 1. 管道 2. System V IPC 3. POSIX IPC 管道 什么是管道 站在文件描述符角度-深度理解管道 站在内核角度-管道本质 ​编辑 匿名管道 测试匿名管道的读写 匿名管道的四大现象: 匿…

目录

进程间通信

进程间通信目的

进程间通信的发展

进程间通信分类

1. 管道

2. System V IPC

3. POSIX IPC  

管道

什么是管道

站在文件描述符角度-深度理解管道

站在内核角度-管道本质

​编辑

匿名管道

测试匿名管道的读写

匿名管道的四大现象:

匿名管道的五大特性


进程间具有独立性 ,但是进程之间也需要数据传递等 ,管道应运而生.

进程间通信

进程间通信本质: 先让不同进程看到同一份资源.

进程间通信目的

  • 数据传输:⼀个进程需要将它的数据发送给另⼀个进程
  • 资源共享:多个进程之间共享同样的资源。
  • 通知事件:⼀个进程需要向另⼀个或⼀组进程发送消息,通知它(它们)发生了某种事件(如进 程终⽌时要通知父进程)。
  • 进程控制:有些进程希望完全控制另⼀个进程的执行(如Debug进程),此时控制进程希望能够 拦截另⼀个进程的所有陷⼊和异常,并能够及时知道它的状态改变。

进程间通信的发展

  • 管道
  • System V进程间通信
  •  POSIX进程间通信

进程间通信分类

1. 管道

匿名管道pipe

命名管道

2. System V IPC

System V 消息队列

System V 共享内存

 System V 信号量

3. POSIX IPC  

消息队列

共享内存

信号量

互斥量

条件变量

读写锁

管道

什么是管道

  • 管道是Unix中最古老的进程间通信的形式。(只能单项通信)
  • 我们把从⼀个进程连接到另⼀个进程的⼀个数据流称为⼀个“管道”

我们原来在命令行使用的管道 |  ,在命令行中集连了两个命令

站在文件描述符角度-深度理解管道

        下面是进程打开同一个文件后 ,在创建子进程的情况 ,我们可以发现在内存中加载的文件内核缓冲区可以同时被两个进程都看到(进程的内核数据结构+ struct file 被拷贝 ,文件部分不需要拷贝)

        补充:

  • 文件只需要打开一次即可 ,多进程打开时 文件的引用计数++ 
  •  struct file中存储着各自进程对该文件的读写位置 ,父子进程对文件从读写位置是独立的 , 所以在创建子进程时需要拷贝struct file  

        在此管道中   读是通过一个struct file    写是通过另一个struct file 

问题

        要是不关闭管道?  导致fd泄漏&&误操作

        先创建管道到再创建子进程,父子进程才能看到同一个管道

站在内核角度-管道本质

匿名管道

        利用上面的原理,设计了一种文件(纯内存级 ,与磁盘外设无关 ,没有名字 ),通过它可以实现进程间通信.

        创建匿名管道用系统调用命令 ─── pipe

fd[0]表⽰读端, fd[1]表⽰写端

#include <unistd.h>
功能:创建⼀⽆名管道
原型int pipe(int fd[2]);
参数输出型参数fd:⽂件描述符数组, 其中fd[0]表⽰读端, fd[1]表⽰写端返回值:成功返回0,失败返回错误代码

测试匿名管道的读写

#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <sys/types.h>
#include <sys/wait.h>
#include<cstring>
int main()
{//创建管道int fds[2] = {0};int rfd = ::pipe(fds);if (rfd != 0)return 1;//创建子进程pid_t id = ::fork();// Fater process -> read// Child process -> writeif (id == 0){// child ,关闭读数据int CloseRet = ::close(fds[0]);      int count = 5;const char *ch = "hello ubuntu";int len =strlen(ch);while (count--){   size_t n = ::write(fds[1], ch, len);if (n < 0){perror("write");return 4;}sleep(2);}::close(fds[1]);exit(0);}else{// parentint CloseRet = ::close(fds[1]);char buf[1024];while (true){size_t n = ::read(fds[0], buf, sizeof(buf)-1);if (n < 0){perror("read");return 4;}else if(n > 0){buf[n] = '\0';std::cout << "child--->father :" << buf << std::endl;}else {std::cout<<"child exit "<<std::endl;break;}}//等待子进程退出pid_t rid = waitpid(id, nullptr, 0);std::cout<<"wait child sucessfully"<<std::endl;::close(fds[0]);}return 0;
}

匿名管道的四大现象:

  1. 空管道读阻塞  管道为空且管道正常 ,read调⽤阻塞,即进程暂停执行,⼀直等到有数据来到为止(read是系统调用)
  2. 满管道写阻塞  管道写满且管道正常 ,write会阻塞,直到有进程读走数据 (write是系统调用) 
  3. 写端关闭后读端返回 EOF 管道写端关闭 读端继续 ,一直读,读到0后 ,表示读到文件结尾,会自己关闭读端
  4. 管道写段正常,读端关闭,write操作会产生信号SIGPIPE ,OS会直接杀死写入的进程

PIPE_BUF为64KB(ubuntu下)

当要写入的数据量不大于PIPE_BUF时,linux将保证写入的原子性。

当要写入的数据量大于PIPE_BUF时,linux将不再保证写入的原子性。

管道(Pipe)的 原子性(Atomicity) 指的是内核保证对管道的 单次读写操作是不可分割的,即使多个进程/线程并发访问,也不会导致数据混乱或中间状态被破坏。

匿名管道的五大特性

  1. 面向字节流
  2. 只能用于具有共同祖先的进程(具有亲缘关系的进程)之间进行通信;通常,⼀个管道由⼀个进程创建,然后该进程调用fork,此后父,子进程之间就可应用该管道。
  3. 文件的生命周期随进程 ,管道也一样(引用计数)
  4. 管道是单向数据传递的,数据只能向⼀个方向流动;需要双方通信时,需要建立起两个管道
  5. 管道自带同步互斥等保护机制(同步:确保读写操作的合理时序,避免读空或写满。互斥:内核保证单次读写操作的原子性(如 write 不会中途被其他进程打断)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/74463.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

架构思维:通用系统设计方法论_从复杂度分析到技术实现指南

文章目录 Question订单履约原始架构痛点目标架构架构图说明关键设计点优点 设计方法论复杂来源解决方案评估标准从设计原则出发 技术实现 &#xff08;以选型Redis为例&#xff09;Redis消息队列的实现细节高可用设计 总结 Question 我们经常聊如何设计一个比较完善的系统&…

Excel(实战):INDEX函数和MATCH函数、INDEX函数实战题

目录 经典用法两者嵌套查值题目解题分析 INDEX巧妙用法让数组公式&#xff0c;自动填充所有、有数据的行/列INDEX函数和SEQUENCE函数 经典用法两者嵌套查值 题目 根据左表查询这三个人的所有数据 解题分析 INDEX函数的参数&#xff1a;第1个参数是选定查找范围&#xff0c…

ECharts仪表盘-仪表盘25,附视频讲解与代码下载

引言&#xff1a; ECharts仪表盘&#xff08;Gauge Chart&#xff09;是一种类似于速度表的数据可视化图表类型&#xff0c;用于展示单个或多个变量的指标和状态&#xff0c;特别适用于展示指标的实时变化和状态。本文将详细介绍如何使用ECharts库实现一个仪表盘&#xff0c;…

清华大学.智灵动力-《DeepSeek行业应用实践报告》附PPT下载方法

导 读INTRODUCTION 今天分享是由清华大学.智灵动力&#xff1a;《DeepSeek行业应用实践报告》&#xff0c;主要介绍了DeepSeek模型的概述、优势、使用技巧、与其他模型的对比&#xff0c;以及在多个行业中的应用和未来发展趋势。为理解DeepSeek模型的应用和未来发展提供了深入的…

VSCODE上ckg_server_linux进程占用CPU过多

现象描述 每次一打开VSCODE&#xff0c;ckg_server_linux进程就启动了&#xff0c;并且一直运行&#xff0c;且占用CPU过高&#xff1b; 推测应该是某个插件的问题导致的&#xff1b; 问题处理 本地搜索了一下&#xff0c;发现是 marscode插件影响的&#xff1b; 禁用marsc…

【大模型理论篇】CogVLM:多模态预训练语言模型

1. 模型背景 前两天我们在《Skywork R1V: Pioneering Multimodal Reasoning with Chain-of-Thought》中介绍了将ViT与推理模型结合构造多模态推理模型的案例&#xff0c;其中提到了VLM的应用。追溯起来就是两篇前期工作&#xff1a;Vision LLM以及CogVLM。 今天准备回顾一下Cog…

2021年蓝桥杯第十二届CC++大学B组真题及代码

目录 1A&#xff1a;空间&#xff08;填空5分_单位转换&#xff09; 2B&#xff1a;卡片&#xff08;填空5分_模拟&#xff09; 3C&#xff1a;直线&#xff08;填空10分_数学排序&#xff09; 4D&#xff1a;货物摆放&#xff08;填空10分_质因数&#xff09; 5E&#xf…

Python入门基础

python基础类型转换 str()与int()类型转换 name 张三 age 20 print(type(name),type(age))print(我叫name 今年&#xff0c; str(age)岁 )a10 b198.8 cFalse print(type(a),type(b),type(c)) print(str(a),str(b),str(c))s1 128 f198.7 s276.77 ffTrue s3hello print(type(s…

OPENCV数字识别(非手写数字/采用模板匹配)

这篇文章的重点在于 模板匹配 的使用。模板匹配是计算机视觉中的一项基本技术&#xff0c;它通过比对输入图像与模板图像的相似度&#xff0c;来进行目标识别。对于数字识别&#xff0c;特别是标准数字的识别&#xff0c;模板匹配非常有效。 请看效果&#xff1a; 文章结构 …

Cursor安装注册+基础配置+入门实操

一、安装注册 官网地址&#xff1a;https://www.cursor.com/ 下载按钮会根据电脑系统来匹配&#xff0c;点击对应「Download」按钮进行下载。完成后&#xff0c;按步骤安装即可。 安装完成后&#xff0c;即可点击图标打开软件。 基础设置完成后&#xff0c;就需要选择注册账号…

秒杀业务优化之从分布式锁到基于消息队列的异步秒杀

一、业务场景介绍 优惠券、门票等限时抢购常常出现在各类应用中&#xff0c;这样的业务一般为了引流宣传而降低利润&#xff0c;所以一旦出现问题将造成较大损失&#xff0c;那么在业务中就要求我们对这类型商品严格限时、限量、每位用户限一次、准确无误的创建订单&#xff0c…

MiniMax GenAI 可观测性分析:基于阿里云 SelectDB 构建 PB 级别日志系统

“阿里云SelectDB作为MiniMax日志存储服务的核心支撑&#xff0c;为在线和离线业务提供了高效、稳定的查询与聚合分析能力。其支持实时物化视图、租户资源隔离、冷热分离等企业级特性&#xff0c;不仅有效解决了日志场景下PB级别数据查询的性能瓶颈&#xff0c;还通过智能化的资…

【YOLO V3】目标检测 Darknet 训练自定义模型

【YOLO V3】目标检测 Darknet 训练自定义模型 前言整体思路环境检查与依赖配置克隆 YOLOv3 Darknet 并编译Clone Darknet 项目文件修改 Makefile 文件修改模型保存频率项目编译 准备数据集配置训练文件数据集&#xff1a;datasets &#xff08;自制&#xff09;权重文件 yolov3…

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能📚页面效果📚指令输入�…

《Python实战进阶》第31集:特征工程:特征选择与降维技术

第31集&#xff1a;特征工程&#xff1a;特征选择与降维技术 摘要 特征工程是机器学习和数据科学中不可或缺的一环&#xff0c;其核心目标是通过选择重要特征和降低维度来提升模型性能并减少计算复杂度。本集聚焦于特征选择与降维技术&#xff0c;涵盖过滤法、包裹法、嵌入法等…

Excel第41套全国人口普查

2. 导入网页中的表格&#xff1a;数据-现有链接-考生文件夹&#xff1a;网页-找到表格-点击→变为√-导入删除外部链接关系&#xff1a;数据-点击链接-选中连接-删除-确定&#xff08;套用表格格式-也会是删除外部链接&#xff09;数值缩小10000倍&#xff08;除以10000即可&am…

WPS宏开发手册——使用、工程、模块介绍

目录 系列文章前言1、开始1.1、宏编辑器使用步骤1.2、工程1.3、工程 系列文章 使用、工程、模块介绍 JSA语法 第三篇练习练习题&#xff0c;持续更新中… 前言 如果你是开发人员&#xff0c;那么wps宏开发对你来说手拿把切。反之还挺吃力&#xff0c;需要嘻嘻&#xf…

EtherCAT转CANopen配置CANopen侧的PDO映射

EtherCAT转CANopen配置CANopen侧的PDO映射 在工业自动化领域&#xff0c;EtherCAT和CANopen是两种广泛应用的通信协议。它们各自具有独特的优势&#xff0c;但在某些应用场景下&#xff0c;需要将这两种协议进行转换以实现设备间的高效数据交换。本文将详细介绍如何在使用Ethe…

【QT】Qt creator快捷键

Qt creator可以通过以下步骤快捷键査看调用关系&#xff1a; 1.打开代码文件。 2.将光标放在你想要查看调用关系的函数名上。 3.按下键盘快捷键 CtrlshiftU。 4.弹出菜单中选择“调用路径”或“被调用路径” 5.在弹出的窗口中可以查看函数的调用关系 折叠或展开代码快捷键&…

【RHCE】LVS-NAT模式负载均衡实验

目录 题目 IP规划 配置IP RS1 RS2 RS3 LVS client 配置RS 配置LVS 安装lvs软件 启动ipvsadm服务 lvs规则匹配 ipvsadm部分选项 客户端测试 总结 题目 使用LVS的 NAT 模式实现 3 台RS的轮询访问&#xff0c;IP地址和主机自己规划。 IP规划 主机IP地址RS1-nat模…