多进程间通信学习之消息队列共享内存信号灯集
- 消息队列:
- 1、基于内核实现,必须在
内核空间创建消息队列; - 2、消息队列中的
消息由类型和正文组成; - 3、消息队列的
默认大小为16KB; - 运行过程:
- 1、进程1将消息
写入到消息队列,进程2根据消息的类型从消息队列中取得对应的消息; - 2、进程1向消息队列中
发送消息,可以采用阻塞或者非阻塞的方式; - 3、进程2从消息队列中
收取消息,也可以采用阻塞或者非阻塞的方式; - 常用的接口函数:
- msgget函数:
- 功能:创建或者获取一个消息队列;
#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>int msgget(key_t key, int msgflg);/*参数:key: 键值key 通过ftok获取的IPC_PRIVATE 表示只有亲缘进程间能只用msgflg:消息队列的标志位IPC_CREAT|0666 或者 IPC_CREAT|IPC_EXCL|0666 返回值:成功 消息队列的id失败 -1 重置错误码*/
- msgsnd函数:
- 功能:向消息队列中写入一条消息;
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);/*参数:msqid:消息队列的idmsgp: 要写入的数据的首地址msgsz:消息正文的大小msgflg:标志位 0 阻塞发送 IPC_NOWAIT 非阻塞发送返回值:成功 0失败 -1 重置错误码*/struct msgbuf {long mtype; /* 消息的类型 必须大于 0 */char mtext[1]; /* 消息正文 可以自定义 */};
- msgrcv函数:
- 功能:在消息队列中读取一条消息;
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);/*参数:msqid:消息队列的idmsgp: 用来保存接收的数据的缓冲区的首地址msgsz:消息正文的大小msgtyp:要接受的消息的类型0 :接收消息队列中第一条消息>0 : 接收指定类型的第一条消息<0 :一般不使用,表示接收消息队列中第一条类型最小的小于msgtyp的绝对值的消息3-2-5-500-200-8读取时,类型传 -200读取的顺序 2-3-5 msgflg:标志位 0 阻塞接收 IPC_NOWAIT 非阻塞接收返回值:成功 实际读到的正文的字节数失败 -1 重置错误码*/struct msgbuf {long mtype; /* 消息的类型 必须大于 0 */char mtext[1]; /* 消息正文 可以自定义 */};
- msgctl函数:
- 功能:控制消息队列;
int msgctl(int msqid, int cmd, struct msqid_ds *buf);/*参数:msqid:消息队列idcmd:指令IPC_STAT:获取消息队列的属性IPC_SET:设置消息队列的属性IPC_RMID:立即删除消息队列只有消息队列的创建者和所有者以及root用户可以删除消息队列msgctl函数的第三个参数被忽略buff:返回值:成功 0失败 -1 重置错误码*/
- 获取和设置消息队列的属性:
- 属性结构体:
struct msqid_ds {struct ipc_perm msg_perm; /* IPC权限结构体 */time_t msg_stime; /* 最后一次执行msgsnd的时间 */time_t msg_rtime; /* 最后一次执行msgrcv的时间 */time_t msg_ctime; /* 最后一次被修改的时间 */unsigned long __msg_cbytes; /* 当前消息队列中的字节数 */msgqnum_t msg_qnum; /* 当前消息队列中的消息数 */msglen_t msg_qbytes; /* 允许的最大字节数 */pid_t msg_lspid; /* 最后一次执行msgsnd的进程的PID */pid_t msg_lrpid; /* 最后一次执行msgrcv的进程的PID */};struct ipc_perm {key_t __key; /* 键值 */uid_t uid; /* 所属用户的id */gid_t gid; /* 所属用户的组id */uid_t cuid; /* 创建者的id */gid_t cgid; /* 创建者的组id */unsigned short mode; /* 权限 */};
- 共享内存:
- 1、同样在
内核中创建共享内存; - 2、进程1和进程2都能够访问到,通过这段内存空间进行数据的传递;
- 3、共享内存是所有进程间通信方式中,
效率最高的,不需要在内核中往返进行拷贝; - 4、共享内存的内存空间大小是
4KB的整数倍; - 信号灯集:
- 1、实现
进程同步的机制; - 2、在一个信号灯集中,可以有很多信号灯;
- 3、这些信号灯集中的信号灯
相互独立,每个灯的值的改变都不会影响到其他的信号灯; - 4、信号灯的值一般设置为
二值量,即0或者1,其中0代表没有资源,1代表有资源;
相关文章:
多进程间通信学习之消息队列共享内存信号灯集
消息队列:1、基于内核实现,必须在内核空间创建消息队列;2、消息队列中的消息由类型和正文组成;3、消息队列的默认大小为16KB;运行过程:1、进程1将消息写入到消息队列,进程2根据消息的类型从消息…...
机器学习基础之《回归与聚类算法(6)—模型保存与加载》
一、背景 现在我们预测每次都要重新运行一遍模型。完整的流程应该是不断调整阈值重复计算。 当训练或者计算好一个模型之后,那么如果别人需要我们提供结果预测,就需要保存模型(主要是保存算法的参数)。 二、sklearn模型的保存和…...
修改Openwrt软路由的web端口
如何修改openwrt路由器的web访问端口号? 在OpenWrt路由器上,如何修改Web访问端口号,通常涉及到修改HTTP服务器的配置文件。默认情况下,OpenWrt使用的HTTP服务器是uHTTPd。 以下是修改Web访问端口号的步骤: 一、通过…...
编程怎么学习视频教程,编程实例入门教程,中文编程开发语言工具下载
编程怎么学习视频教程,编程实例入门教程,中文编程开发语言工具下载。 给大家分享一款中文编程工具,零基础轻松学编程,不需英语基础,编程工具可下载。 这款工具不但可以连接部分硬件,而且可以开发大型的软件…...
得帆信息携手深信服,联合打造高安全PaaS超融合一体化解决方案
上海得帆信息技术有限公司(以下简称“得帆”)和深信服科技股份有限公司(以下简称“深信服”)携手推出融合安全性、稳定性、高效性于一体的全新PaaS超融合解决方案。 用户痛点分析 全面推进企业数字化与信息化的趋势下,…...
arcgis--浮点型栅格数据转整型
利用【Spatial Analyst工具】-【数学】-【转为整型】工具,将浮点型数据转为整型。如下: 【转为整型】对话框参数设计如下: 转换结果如下:...
nginx四层tcp负载均衡及主备、四层udp负载均衡及主备、7层http负载均衡及主备配置(wndows系统主备、负载均衡)
准备工作 服务器上安装、配置网络负载平衡管理器 windows服务器热备、负载均衡配置-CSDN博客 在windows服务器上安装vmware17 win10 上安装vmware17-CSDN博客 在windows上利用vmware17 搭建centos7 mini版 在windows上利用vmware17 搭建centos7 mini版本服务器-CSDN博客 …...
Electron 控制屏幕亮度
CMD控制屏幕亮度 一开始用brightness,dev下可用,打包后执行报错,找了很多文章都没办法解决。后来想到执行CMD命令去设置( 如何在 Windows 中使用命令行调整屏幕亮度 )。测试打包后正常,无需管理员权限。 引入exec const { exec }…...
TSINGSEE视频汇聚管理与AI算法视频质量检测方案
一、建设背景 随着互联网视频技术的发展,视频监管在辅助安全生产、管理等方面发挥了不可替代的作用。但是,在监管场景中,仍然存在视频掉线、视频人为遮挡、视频录像存储时长不足等问题,对企业的日常管理和运转存在较大的安全隐患…...
linux系统中文件系统和挂载点的联系和区别?
在 Linux 系统中,文件系统(File System)和挂载点(Mount Point)是密切相关的概念,它们之间有如下联系和区别: 文件系统:文件系统是操作系统用于组织和管理数据的一种结构。它定义了文…...
CTFSHOW 文件上传
web151 JS前端绕过 直接上传 png的图片马 然后抓包修改为php asystem("ls /var/www/html"); asystem("cat /var/www/html/flag.php"); web152 和151一样的方法也可以实现上传 asystem("ls /var/www/html"); asystem("cat /var/www/html…...
自组织竞争网络在模式分类中的应用——患者癌症发病预测
大家好,我是带我去滑雪! 自组织神经网络可以通过对客观事件的反复观察、分析与比较,自行提示内在规律,并对具有共同特征的事物进行正确的分类。该网络更与人脑中生物神经网络的学习模式类似,即可以通过自动寻找样本中的…...
神经网络中的量化与蒸馏
本文将深入研究深度学习中精简模型的技术:量化和蒸馏 深度学习模型,特别是那些具有大量参数的模型,在资源受限环境中的部署几乎是不可能的。所以就出现了两种流行的技术,量化和蒸馏,它们都是可以使模型更加轻量级&…...
数据库——表结构相关SQL
一、GP或PostgreSQL 1.获取表结构 SELECT a.schemaname schema_name, a.tablename table_name, string_agg(b.column_name, ,) AS columns FROM (SELECT schemaname, tablename FROM pg_tables WHERE schemaname public and tablename like test%) a LEFT JOIN (SELECT tabl…...
python 爬虫之requests 库以及相关函数的详细介绍
get 函数 当你使用 requests.get 函数时,你可以按照以下步骤来发起一个 GET 请求: 导入 requests 模块: 在你的 Python 脚本或程序中,首先导入 requests 模块。 import requests指定目标 URL: 设置你要请求的目标 URL…...
突破职场竞争,引领未来发展:考取《研发效能(DevOps)工程师职业技术认证》
就业形势堪忧,什么最有保障?考个“国家级”证书傍身吧! 工信部教考中心作为中国领先的行业技能认证机构,其颁发的认证证书不仅代表了个人在信息技术领域的专业能力,更可以录入工业和信息化技术技能人才数据库…...
设计模式例子
策略模式(Strategy Pattern) 策略模式 (Strategy Pattern): 定义一系列算法,将每个算法都封装起来,并使它们之间可以互换。例如:java.util.Comparator 以下是一个简单的Java策略模式的例子,涉及一个商品的…...
腾讯云入侵
早上8点左右收到腾讯云的相关短信,提示机器可能存在挖坑风险。马上登录机器看了一下,发现crontab有个比较诡异的任务 [devVM_0_12_centos ~]$ crontab -l 11 * * * * /home/dev/.config/systemd/user/systemd-tmpfiles-cleanup/systemd-tmpfiles-cleanu…...
第二章 智能家居子系统——C51单片机 配置波特率115200
前言 本章为智能家居项目的第二章,本章主要写51单片机的定时器timer,串口UART,中断,外接模块DHT11 同项目其他博文: 项目的概述链接:Linux智能家居项目概述-CSDN博客 第一章 主控代码开发链接:…...
registry镜像仓库通过HTTP API删除镜像
registry组件提供了HTTP的接口,可以参考:官网API说明 删除思路: 镜像由多个layers层组成,DELETE /v2/<name>/blobs/<digest>可以用来删除一个单独的层,但是我们的目的不是要删除层。 我们用DELETE /v2/…...
UG NX 合并曲面减少面得数量
“同步建模”里的“优化面” 确实是处理这类问题最直接、最高效的命令。对于客户发来的非参数化模型(比如 STP、IGS 等),中间有碎线或分割线导致的“假面”,用它来合并非常合适。核心操作:使用“优化面”命令 启动命令…...
基于双向反激变换器的SOC估算与主动均衡策略仿真研究——复现硕士论文并拓展六节电池模型与均衡策略分析
基于双向反激变换器的SOC估算与主动均衡仿真 可以 [1]复现硕士论文:《锂离子电池SOC估算与主动均衡策略研究_王昊》 [2]六节电池模型:使用Simmulink搭建了六节电池主动均衡仿真 [3]均衡策略:选择了电压、SOC及其分阶段使用作为主动均衡变量&a…...
09_微服务划分与团队人数之阿里实践与行业案例
微服务划分与团队人数之阿里实践与行业案例 体系内容 拆分维度:业务能力维度、通用能力维度、非功能维度 组织原则:康威定律、领域自治、平台沉淀、核心/非核心差异化治理 Spring Cloud Alibaba 视角:Nacos、Sentinel、RocketMQ、Seata、Dubbo 在企业场景中的组合打法 行业…...
深入理解Python @dataclass:从基础到高级用法
Python 3.7引入了dataclass装饰器,这是一个强大的工具,能够显著减少数据类的样板代码。本文将详细介绍dataclass的各种用法,特别是如何正确处理可变默认值和类型注解。 什么是dataclass dataclass是位于dataclasses模块中的装饰器,…...
告别OBS!用JavaCV+FFmpeg在Windows上搭建个人直播推流服务器(含Nginx配置)
用JavaCVFFmpeg构建Windows直播推流服务器的全栈指南 直播技术正在从专业领域向个人开发者渗透,但传统方案如OBS往往过于笨重且缺乏定制性。本文将带你用JavaCVFFmpegNginx搭建一套轻量级直播推流服务器,实现从视频采集、编码推流到服务端分发的完整链路…...
基于MATLAB的多种概率分布拟合与KS检验:从GEV到Exponential分布选择与实践
11种概率分布的拟合与ks检验,可用于概率分析,可靠度计算等领域 案例中提供11种概率分布,具体包括:gev、logistic、gaussian、tLocationScale、Rayleigh、Loglogistic、Lognormal、GeneralizedPareto、Weibull、Gamma、Exponential…...
率零测评:AI率83%的文章降完是什么效果
率零(www.0ailv.com)最大的特点是便宜——3.2元/千字,在主流工具里价格最低,还有1000字免费体验。这让很多AI率高的同学把它作为第一选择。 它的实际效果怎么样?这篇文章来说清楚。 测试基本情况 测试论文ÿ…...
flac3d7.0主应力方向导出与可视化:使用fish导出单元体数据并用matlab绘制塑性区图
flac3d7.0主应力方向的导出并绘图 使用fish将单元体的三个主应力方向数据导出,并使用matlab绘图,可只对部分区域(如塑性区)的数据进行绘图在岩土工程数值模拟后处理中,三维主应力方向可视化是个挺有意思的活。今天咱们直接上手实操࿰…...
comsol方形锂电池电化学—热耦合模型充放电循环热仿真,三种模型 一维电化学模型耦合三维方形...
comsol方形锂电池电化学—热耦合模型充放电循环热仿真,三种模型 一维电化学模型耦合三维方形铝壳电池模型 还包括电池组风冷、相变散热模型最近在折腾方形锂电池的充放电热仿真,发现电化学和热耦合的坑比想象中深。尤其是当一维电化学模型要和三维结构联…...
手写数字识别在FPGA上的暴力美学
fpga实现cnn神经网络加速 手写字硬件加速 FPGA artix7-100t 纯verilog编写 神经网络硬件加速 使用ov5640摄像头dvp接口 verilog实现手写字识别 包括卷积层、全连接层、池化层、softmax,有效减轻误识别问题注意: 该项目并未使用到arm核,是使用传统…...
