Linux之进程间通信(二)---模拟进程池
进程池创建多个子进程只有一个父进程一个子进程外层套循环创建多个进程父进程还要对channle进行先描述在组织对管道进行描述-class Channel大纲1.创建多个子进程2.对子进程和管道进行管理3.释放资源阶段检测是否创建子进程成功和文件描述符接下来对现有函数进行封装--利用c类class ProcessPool { public: // a. 创建多个进程,创建多个管道 int CreateProcessPool() { for (int i 0; i 5; i) { int pipefd[2] {0}; int n pipe(pipefd); if (n 0) { cerr pipe error endl; return pipeerror; } pid_t id fork(); if (id 0) { cerr fork error endl; return forkerror; } else if (id 0) { // 子进程 close(pipefd[1]); // 子进程关掉写,进行读 DoTask(pipefd[0]); exit(OK); } else { // 父进程 close(pipefd[0]); // 父进程写 // pipefd[1]循环一下就没有了,要储存 Channel ch(pipefd[1], id); // 将子进程和要写的管道文件进行记录 channels.push_back(ch); cout 创建子进程成功,pid: id endl; } } return OK; } void DebugPrint() { for(auto ch : channels) { ch.Print(); } } private: // 未来维护和组织所有的channel vectorChannel channels; };将创建多个子进程,和打印,文件描述符,创建子进程是否成功都封装到ProcessPool这个类里面,然后将vectorChannel channels 变成该类的成员变量,main函数的内容变得十分简洁实现完成不同任务的需求约定统一四字节进行读写任务我们想要不要让他很重复,这个时候要用到函数指针,然后回调的操作来实现functionvoid(int)可调用对象包装器。void函数返回值为 void(int)这个可调用对象接收 1 个 int 类型参数task_t就是别名代表所有可以接收 int 参数、返回 void 的可调用类型。可以包装普通函数、函数指针、lambda 表达式、仿函数对象。using task_tfunctionvoid(int);task_t是类型别名代表一个可调用对象接收 1 个 int 参数返回 voidvoid CreateProcessPool(task_t cb)cbcallback 回调类型是task_t。意思函数CreateProcessPool接收一个可调用对象进来不在本函数内部执行交给子进程去调用。//子进程分支 close(pipefd[1]); cb(pipefd[0]); // 执行回调 exit(OK);子进程拿到管道读端pipefd[0]把文件描述符当做实参传给回调执行用户传入的函数。pool.Init(DoTask);把DoTask函数传进去。DoTask签名void DoTask(int fd)正好匹配void(int)。整体流程main 把 DoTask 作为回调传给 Init → Init 传给 CreateProcessPool → fork 出子进程 → 子进程调用cb(pipefd[0])等价执行DoTask(pipefd[0])。对子进程和管道进行管理那么要如何选择一个进程呢???比较好的是将任务平均分配到子进程1.轮询2.随机3.权重接下来我们采用轮询的方式来分配任务选择任务制作任务清单任务表实现的底层typedef 干了什么typedef void(*mytask_list)();void (*)()这是函数指针类型代表保存一个函数地址该函数没有参数返回值 void。typedef给这个复杂类型起一个简短名字mytask_list。// 普通int a; a是int类型变量 // 现在mytask_list fp; fp就是一个函数指针变量可以存函数地址 mytask_list fp SyncDick; fp(); //等价 SyncDick();mytask_list mytask[4];mytask[4]这是函数指针数组数组里面每一格都能存放一个函数的地址。{SyncDick, Download, PrintLog, UpdateStatus}把 4 个全局函数的地址依次填进数组 0、1、2、3 下标位置。数组下标存储的函数地址调用写法0SyncDickmytask[0]();→执行 SyncDick ()1Downloadmytask[1]();→执行 Download ()2PrintLogmytask[2]();→执行 PrintLog ()3UpdateStatusmytask[3]();→执行 UpdateStatus ()种下随机数种子^pid,让取出来的数更加随机验证任务分配是否随机发送任务给进程processpoolChannel补充写和管道名的成员函数子进程完成发送过来的任务释放资源processpool创建成员函数Quit用来释放资源要将管道关闭然后将子进程进行回收问题一如果父进程关闭,但是子进程还没有跑完会有影响吗是没有的,子进程只有将管道内容全部读完才会结束问题二将Quit这样可以吗发现卡住了那么这是为什么呢???实际上是因为管道文件没有被关干净子进程是以父进程为模板创建的,很多的内核数据结构的信息都是和父进程一样的也就是说,越到后面创建的子进程对于前面父进程创造的管道文件都拥有写的权限将父进程对于管道文件的写权限关闭,其管道文件对应的子进程并不能接受到管道以全部关闭,然后再退出,因为这其中后面创建的子进程对于改管道文件依然可以写入那么应该要如何解决这个问题呢???解决方案:1.从最后一个创建的子进程开始关闭管道文件2.实现真正w:r1:1让之后创建的子进程关闭之前的管道文件

相关新闻

AI模型对比实战:DeepSeek、Claude、Kimi API调用与性能评估指南

AI模型对比实战:DeepSeek、Claude、Kimi API调用与性能评估指南

在实际 AI 模型应用和开发中,我们经常需要对比不同模型在特定任务上的表现,以选择最适合当前场景的工具。近期,围绕 DeepSeek-V4-Pro、Fable5、GPT-5.6-Sol 和 KimiK3 等模型的讨论非常热烈,尤其是在代码生成、对话和推理能力方面…

2026/8/7 19:58:33 阅读更多 →
PC端微信QQ防撤回终极指南:3步实现消息永久保存

PC端微信QQ防撤回终极指南:3步实现消息永久保存

PC端微信QQ防撤回终极指南:3步实现消息永久保存 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitcode.com/GitH…

2026/8/8 1:04:41 阅读更多 →
stm32 -- 中断

stm32 -- 中断

tags: “#中断”“#stm32”“#中断优先级”“#外部中断”“#NVIC”“#串口”“#舵机”“#按键” date: 2026-08-04中断的基础概念 1)单片机中断编程: 常规程序 – 突发事件 – 处理突发事件 – 继续常规程序 其中:突发事件称为中断源 处理突发…

2026/8/8 8:13:49 阅读更多 →

最新新闻

你的微信记忆会消失吗?用这个开源工具永久保存每一刻对话

你的微信记忆会消失吗?用这个开源工具永久保存每一刻对话

你的微信记忆会消失吗?用这个开源工具永久保存每一刻对话 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/We…

2026/8/8 14:02:23 阅读更多 →
AI Agent技能安全扫描:静态分析工具SkillSpector的设计与实践

AI Agent技能安全扫描:静态分析工具SkillSpector的设计与实践

1. 项目概述:为什么我们需要一个AI技能的“安全扫描仪”?最近在折腾各种AI Agent,从AutoGPT到GPT Engineer,再到一些垂直领域的智能体,我发现一个挺让人头疼的问题:这些Agent的功能越来越强,能安…

2026/8/8 14:02:23 阅读更多 →
AI编码助手安全威胁:Miasma蠕虫原理与防御实战指南

AI编码助手安全威胁:Miasma蠕虫原理与防御实战指南

1. 项目概述:当AI助手成为攻击跳板最近在安全圈和开发者社区里,一个名为“Miasma”的蠕虫概念验证(PoC)引起了不小的震动。它不像传统病毒那样直接攻击系统漏洞,而是瞄准了一个我们越来越依赖的工具——AI编码助手。简…

2026/8/8 14:02:23 阅读更多 →
用上这几款word压缩方法,投标材料从超标到秒传只花了一刻钟

用上这几款word压缩方法,投标材料从超标到秒传只花了一刻钟

八月中旬,我把一份招标文件终稿拖进邮箱附件区,系统弹出红色提示:附件总大小超过企业邮箱限制,无法发送。那一刻距离截标还剩不到一顿饭的工夫,整份材料接近两百页,里面塞满了现场照片、盖章扫描页和产品图…

2026/8/8 14:02:23 阅读更多 →
终极免费AI视频增强神器:Video2X完整使用指南

终极免费AI视频增强神器:Video2X完整使用指南

终极免费AI视频增强神器:Video2X完整使用指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/video2x …

2026/8/8 14:02:22 阅读更多 →
HarmonyOS 7 / API 26 3DGS 重建会话卡住排查:进度、取消和后台恢复实战

HarmonyOS 7 / API 26 3DGS 重建会话卡住排查:进度、取消和后台恢复实战

HarmonyOS 7 / API 26 3DGS 重建会话卡住排查:进度、取消和后台恢复实战重建会话不是普通按钮点击 HarmonyOS 7 / API 26 的 3DGS 端侧重建属于很典型的长任务。它和普通页面请求不一样:普通请求失败了,大不了提示重试;重建任务一…

2026/8/8 14:01:22 阅读更多 →

日新闻

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及,无数企业下场搭建智能体系统,可落地阶段难题接踵而至:上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节,空有前沿技术概念&…

2026/8/8 0:00:07 阅读更多 →
PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码 【免费下载链接】php-qrcode A PHP QR Code generator and reader with a user-friendly API. 项目地址: https://gitcode.com/gh_mirrors/ph/php-qrcode 在当今数字时代,二维码已…

2026/8/8 0:00:08 阅读更多 →
UniApp微信小程序隐私保护组件开发:从原理到实战

UniApp微信小程序隐私保护组件开发:从原理到实战

1. 项目缘起:为什么我们需要一个隐私保护通用组件?最近在维护一个基于uniapp开发的微信小程序矩阵时,我遇到了一个非常棘手的问题。随着平台对用户隐私保护的要求越来越严格,几乎每一个新版本发布,或者在某些特定机型&…

2026/8/8 0:00:08 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/8 8:58:26 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/7 17:02:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/7 23:54:54 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/7 17:02:36 阅读更多 →