多进程间通信学习之消息队列共享内存信号灯集
- 消息队列:
- 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/…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
