Linux之进程间通信(二)---模拟进程池

发布时间:2026/8/6 16:31:57

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调用与性能评估指南

2026/8/6 16:31:57

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

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

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

2026/8/6 16:31:57

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

如何快速上手ComfyUI IPAdapter Plus:5分钟掌握图像风格迁移的终极指南

如何快速上手ComfyUI IPAdapter Plus:5分钟掌握图像风格迁移的终极指南

2026/8/6 16:21:56

如何快速上手ComfyUI IPAdapter Plus:5分钟掌握图像风格迁移的终极指南 【免费下载链接】ComfyUI_IPAdapter_plus 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_IPAdapter_plus 还在为AI图像生成缺乏个性化控制而烦恼吗?ComfyUI IPAdap…

Linux基础之shell脚本

Linux基础之shell脚本

2026/8/6 17:42:00

一、了解什么是shell脚本shell脚本的本质就是 shell命令的有序集合 ,它属于一种解释型语言,不需要编译,方便操作者对重复性的劳动进行编程,同时shell脚本也是一种无类型语言,其变量没有类型或字符串类型 注意事项: 对…

【DevExpress中文教程】在GridView中动态创建列时如何绑定不同编辑处理控件

【DevExpress中文教程】在GridView中动态创建列时如何绑定不同编辑处理控件

2026/8/6 17:42:00

在使用DevExpress GridView时,为了方便往往使用一些扩展函数,动态创建GridView列的编辑控件对象,然后我们可以灵活的对内容进行编辑或者使用一些弹出的对话框窗体进行处理内容的录入,本文就是介绍这一主题:在DevExpres…

Kendo UI for jQuery,一个现代的jQuery UI组件!

Kendo UI for jQuery,一个现代的jQuery UI组件!

2026/8/6 17:42:00

Kendo UI for jQuery是什么?Kendo UI for jQuery是完整的jQuery UI组件库,可快速构建出色的高性能响应式Web应用程序。Kendo UI for jQuery提供在短时间内构建现代Web应用程序所需要的工具,从多个UI组件中选择,并轻松地将它们组合…

佳能g1800 g1810 g2800 g2810 g3800 g3810 g4800 g4810清零软件5b00,5b02,5b04,1700,1702,1704,p07,e08亲测完美维修。

佳能g1800 g1810 g2800 g2810 g3800 g3810 g4800 g4810清零软件5b00,5b02,5b04,1700,1702,1704,p07,e08亲测完美维修。

2026/8/6 17:42:00

极速下载:点这里下载 密码:00 百度云:点这里下载 备用:pan.baidu.com/s/1gls2G4rqWWP-Mw-z6tVjnQ?pwd0000 常见型号如下: G1000、G1100、G1200、G1400、G1500、G1800、G1900、G1010、G1110、G1120、G1410、G1420、G1411、G1…

使用MyEclipse如何部署Descriptor (XML)编辑器?

使用MyEclipse如何部署Descriptor (XML)编辑器?

2026/8/6 17:41:59

Descriptor (XML) Editor编辑器包含了高级的XML编辑功能,在本文中您将了解到这些编辑功能、Web XML编辑等,此功能包含在MyEclipse中可用。1. Web XML 编辑器MyEclipse Web XML编辑器包括高级XML编辑功能,如:语法高亮显示标签和属性…

QRazyBox终极指南:5分钟掌握损坏二维码修复的完整教程

QRazyBox终极指南:5分钟掌握损坏二维码修复的完整教程

2026/8/6 17:31:59

QRazyBox终极指南:5分钟掌握损坏二维码修复的完整教程 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox 你是否曾经遇到过打印模糊的二维码无法扫描?或者精心设计的二维码…

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

2026/8/4 15:23:37

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经从网易云音乐下载了心爱的歌曲&am…

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

2026/8/5 6:02:27

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比工程导读:本文深入讨论 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比 在生产工程实践中的核心落地方案。基于 分布式架构与微服务设计 视角,剖析实际痛点、架…

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

2026/8/5 8:19:55

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案 【免费下载链接】MoneyPrinterPlus AI一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上,赚钱从来没有这么容易过! 支持本地语音模型chatTTS,fasterwhisper,…

Unity相机抖动插件Camera-Shake集成与应用实战指南

Unity相机抖动插件Camera-Shake集成与应用实战指南

2026/8/6 0:00:51

1. 项目概述与核心价值最近在做一个动作游戏,需要给主角的重击和爆炸场景加点料,让打击感更足。我第一时间就想到了给相机加个抖动效果,毕竟这是提升玩家沉浸感最简单直接的手段之一。自己手写一个也不是不行,但时间成本高&#x…

Cocos Creator 3.7微信小游戏开发:从架构设计到提审上线的全流程实战指南

Cocos Creator 3.7微信小游戏开发:从架构设计到提审上线的全流程实战指南

2026/8/6 0:00:51

1. 项目概述:为什么需要一份3.7版本的专属适配指南?如果你是一位使用Cocos Creator开发微信小游戏的开发者,并且项目正运行在3.7版本上,那么你很可能已经感受到了那份“甜蜜的烦恼”。一方面,Cocos Creator 3.7是一个功…

AI编程实战:从Prompt工程到工具链集成,打造高效开发工作流

AI编程实战:从Prompt工程到工具链集成,打造高效开发工作流

2026/8/6 0:00:51

1. 项目概述:一次开源AI编程课程的深度重构 最近,我把自己的开源AI编程课程《Claude Code》做了一次从里到外的大更新。如果你对利用Claude、Codex这类大模型来辅助编程感兴趣,或者正在寻找一个能跟上最新AI编码工具迭代节奏的学习路径&#…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/6 5:43:30

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/4 14:25:14

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/4 15:11:03

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…