当前位置: 首页 > article >正文

进程池(C/C++)

C语言实现/* * 进程池示例 * 使用消息队列进行任务分发 */#includestdio.h#includestdlib.h#includeunistd.h#includesys/wait.h#includesys/msg.h#includestring.h#defineWORKER_NUM3// 进程池中工作进程的数量#defineMSG_KEY12345// 消息队列的 key#defineMSG_TYPE1// 消息类型/* 消息结构体必须包含 long type */structmsgbuf{longtype;// 消息类型用于区分inttask_id;// 任务编号};/* 子进程工作进程入口函数 */voidworker_process(intmsgid){structmsgbufmsg;while(1){/* * 从消息队列接收任务 * msg.type MSG_TYPE只接收该类型的消息 * 0阻塞等待 */msgrcv(msgid,msg,sizeof(msg.task_id),MSG_TYPE,0);printf([Worker PID%d] start task %d\n,getpid(),msg.task_id);sleep(2);// 模拟任务执行耗时printf([Worker PID%d] finish task %d\n,getpid(),msg.task_id);}}intmain(){pid_tpid;intmsgid;/* 创建消息队列用于父进程给子进程发任务 */msgidmsgget(MSG_KEY,IPC_CREAT|0666);if(msgid0){perror(msgget);exit(1);}/* 创建进程池 */for(inti0;iWORKER_NUM;i){pidfork();if(pid0){perror(fork);exit(1);}if(pid0){// 子进程成为 workerworker_process(msgid);exit(0);// worker 不会回到 main}else{// 父进程继续创建下一个 workerprintf(Create worker PID%d\n,pid);}}/* 父进程发送任务 */for(inttask_id1;task_id10;task_id){structmsgbufmsg;msg.typeMSG_TYPE;msg.task_idtask_id;/* * 发送任务到消息队列 * 子进程会通过 msgrcv 竞争获取任务 */msgsnd(msgid,msg,sizeof(msg.task_id),0);printf([Master] send task %d\n,task_id);sleep(1);// 控制任务产生速度}/* 回收子进程实际工程中通常会用信号优雅退出 */while(1){wait(NULL);}return0;} 编译 运行gcc process_pool.c -o process_pool./process_pool**c实现**#includeiostream#includevector#includeunistd.h#includesys/wait.h#includefcntl.h#includecstring#includealgorithm/* * Worker 进程类 * 每个 Worker 绑定一条管道 */classWorker{public:pid_t pid;// 子进程 PIDintpipe_fd;// 读端文件描述符Worker(pid_t p,intfd):pid(p),pipe_fd(fd){}};/* * 进程池类 */classProcessPool{private:std::vectorWorkerworkers;size_t next_worker0;// 轮询索引RR 调度public:/* * 构造函数创建进程池 */ProcessPool(size_t worker_num){for(size_t i0;iworker_num;i){intpipefd[2];// 创建管道if(pipe(pipefd)-1){perror(pipe);exit(1);}pid_t pidfork();if(pid0){perror(fork);exit(1);}if(pid0){// 子进程 close(pipefd[1]);// 关闭写端worker_loop(pipefd[0]);exit(0);}else{// 父进程 close(pipefd[0]);// 关闭读端workers.emplace_back(pid,pipefd[1]);std::cout[Master] Create worker pidpidstd::endl;}}}/* * 子进程主循环 */voidworker_loop(intread_fd){inttask_id;while(true){ssize_t nread(read_fd,task_id,sizeof(task_id));if(n0)break;// 管道关闭std::cout[Worker PIDgetpid()] start task task_idstd::endl;sleep(2);// 模拟任务执行std::cout[Worker PIDgetpid()] finish task task_idstd::endl;}}/* * 分发任务Round Robin */voiddispatch(inttask_id){size_t idxnext_worker;next_worker(next_worker1)%workers.size();write(workers[idx].pipe_fd,task_id,sizeof(task_id));std::cout[Master] assign task task_id to worker workers[idx].pidstd::endl;}/* * 回收子进程 */~ProcessPool(){for(autow:workers){close(w.pipe_fd);waitpid(w.pid,nullptr,0);}}};intmain(){ProcessPoolpool(3);// 创建 3 个 workerfor(inti1;i10;i){pool.dispatch(i);sleep(1);// 控制任务速率}return0;}

相关文章:

进程池(C/C++)

C语言实现 /** 进程池示例* 使用消息队列进行任务分发*/#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/wait.h> #include <sys/msg.h> #include <string.h>#define WORKER_NUM 3 // 进程池中工作进…...

ChatAllAI2开源项目:一站式多模型AI对话平台部署与二次开发指南

1. 项目概述与核心价值最近在折腾AI应用开发&#xff0c;发现一个挺有意思的现象&#xff1a;很多开发者想快速体验不同大语言模型的能力&#xff0c;或者想给自己的项目集成一个多模型对话的前端界面&#xff0c;但往往被繁琐的环境配置、复杂的API调用和界面开发给劝退。我自…...

开源AI Agent项目MatchClaws:用LLM重塑社交匹配与对话体验

1. 项目概述&#xff1a;当AI遇见约会&#xff0c;一个开源智能体如何重塑社交连接最近在GitHub上闲逛&#xff0c;发现了一个挺有意思的项目&#xff1a;jessastrid/matchclaws-ai_agent_dating。光看名字&#xff0c;你可能会觉得这又是一个蹭AI热度的概念玩具&#xff0c;但…...

VSCode配置C++开发环境:OpenCV跨平台实战指南

1. 为什么选择VSCode进行C开发&#xff1f; 很多刚接触C开发的同学都会纠结该用什么开发工具。我在刚入门时也试过各种IDE&#xff0c;从Visual Studio到CLion&#xff0c;最后发现VSCode才是最适合跨平台开发的轻量级选择。VSCode不仅免费开源&#xff0c;而且通过插件系统可以…...

【运维必备软件安装教程】

文章目录一、VMware Workstation Pro二、MobaXterm一、VMware Workstation Pro 安装虚拟机&#xff08;VMware&#xff09;保姆级教程&#xff08;附安装包&#xff09; 二、MobaXterm MobaXterm&#xff08;终端工具&#xff09;下载&安装&使用教程...

一个开源免费的轻量Blazor UI控件库

bit BlazorUI组件原生、易于定制,并且在所有交互式Blazor模式(WASM、服务器、混合、预渲染)中无缝运行,节省时间,使开发过程更愉快。 bit BlazorUI是一个专为 Blazor 开发的高性能原生 UI 组件库,可以帮助开发者高效构建高质量应用。它拥有 80 多个高性能组件,总体体积…...

解决kali服务器ssh登陆受限

1. 给服务器配置 ssh 端口映射&#xff08;默认22&#xff09;&#xff0c;并开放相应的端口防火墙 2. 安装并为一般用户&#xff08;这里以 kali 用户为例&#xff09;配置 sudo 命令 (在 root 用户下) apt update apt install -y sudo usermod -aG sudo kali # 测试确认一下 …...

在线水印去除怎么做?2026年在线水印去除工具推荐与方法盘点

在日常工作和生活中&#xff0c;我们经常需要处理带有水印的图片、视频或文档。无论是工作素材整理、内容创作还是个人资料处理&#xff0c;了解如何使用在线水印去除方法都能显著提升效率。本文将系统梳理2026年主流的在线水印去除工具&#xff0c;并详细介绍各类去水印方法的…...

BMJ Open与Perplexity深度耦合实验(仅限2024Q3授权机构访问的私有检索协议曝光)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;BMJ Open与Perplexity深度耦合实验的背景与授权边界界定 BMJ Open 作为开放获取、同行评审的综合性医学研究期刊&#xff0c;其元数据 API&#xff08;v2&#xff09;支持结构化查询与批量文献摘要拉取…...

【ElevenLabs情绪模拟技术深度解密】:20年AI语音工程师亲测的5大情感建模陷阱与避坑指南

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs情绪模拟技术深度解密 ElevenLabs 的情绪模拟并非简单调节语调或语速&#xff0c;而是通过多维度声学特征建模——包括基频&#xff08;F0&#xff09;动态包络、能量分布、共振峰偏移、微停…...

长期使用Taotoken服务在模型稳定性与账单透明度方面的综合反馈

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 长期使用Taotoken服务在模型稳定性与账单透明度方面的综合反馈 作为一名长期将大模型能力集成到开发工作流中的开发者&#xff0c;…...

从4G到5G再到6G:分集与合并技术(SC/MRC/EGC)是如何演进的?一份给工程师的对比指南

从4G到6G&#xff1a;分集与合并技术的演进与工程实践指南 在移动通信领域&#xff0c;信号传输质量始终是工程师们面临的核心挑战。随着通信技术从4G向5G乃至6G演进&#xff0c;分集与合并技术作为对抗信道衰落的关键手段&#xff0c;其实现方式和应用场景也发生了深刻变革。…...

Veo 2与Sora、Pika、Runway ML v4终极横评:18项指标实测(含时长支持、物理仿真、多主体追踪)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Veo 2视频生成技术全景概览 Veo 2 是 Google DeepMind 推出的下一代原生视频扩散模型&#xff0c;支持长达 60 秒、1080p 分辨率、24fps 的高质量视频生成&#xff0c;显著超越前代在时序一致性、物理…...

2026年AI大模型API中转站深度测评:谁能成为生产环境下的最优解决方案?

2026年&#xff0c;AI模型的迭代速度进一步加快。从年初在技术社区引起轰动的OpenClaw架构&#xff0c;到GPT - 5.4、Claude 4.6等性能领先的通用模型&#xff0c;再到视频生成领域的Sora2与Veo3&#xff0c;模型之间的竞争愈发激烈。然而&#xff0c;国内开发者在调用这些模型…...

2026年OpenAI接口中转站真实测评:哪款平台能为开发者带来极致体验?

跨国网络延迟、复杂的支付方式以及分散的接口协议&#xff0c;让开发者调用OpenAI API的体验变得支离破碎。而一个智能中转平台&#xff0c;能让这一切变得像调用本地服务一样简单。通过API中转平台&#xff0c;可以一站式解决国内外主流OpenAI模型在价格、网络连通性以及支付方…...

CloakBrowser 拆机:57 个 C++ 补丁能不能撑起“30/30 通过“的承诺?

路易乔布斯 2026-05-14 AI Daily 深度拆解 数据时间锚点&#xff1a;本文写作时 CloakHQ/CloakBrowser 数据为 10.4k stars / wrapper v0.3.28 / Chromium 146 / 57 个 C 补丁&#xff08;Linux/Win&#xff09;/ 16 个 release。一、又一个 &#x1f525; 重磅&#xff0c;但…...

191k Star 的 Superpowers:把 AI 从“会写代码“改造成“守纪律的工程师“

路易乔布斯 2026-05-14 AI Daily 深度拆解 数据时间锚点&#xff1a;本文写作时 obra/superpowers 数据为 191k stars / v5.1.0 (2026-04-30) / 8 个编码代理平台已支持。一、那条让我点进去的 AI 日报 今早翻 AI 日报&#xff0c;第 9/10 条标着 &#x1f525; 重磅&#xf…...

local-claw:轻量级容器化开发环境工具的设计与实战

1. 项目概述&#xff1a;一个为本地开发量身定制的“瑞士军刀”如果你和我一样&#xff0c;长期在本地环境进行软件开发、数据分析和自动化脚本编写&#xff0c;那你一定对“环境隔离”和“依赖管理”这两个词深有感触。每次启动一个新项目&#xff0c;或者在不同项目间切换&am…...

嵌入式Linux设备型号信息全解析:从RK3562开发板到生产实践

1. 项目概述与核心价值最近在调试一块基于瑞芯微RK3562芯片的开发板&#xff0c;来自触觉智能。在推进一个嵌入式项目的过程中&#xff0c;遇到了一个不大不小但很关键的问题&#xff1a;我需要从系统层面准确获取并验证这块板子的设备型号信息。这听起来简单&#xff0c;但在实…...

AI智能体开发脚手架:基于模板快速构建可工程化智能体系统

1. 项目概述&#xff1a;一个为AI智能体开发者准备的“开箱即用”脚手架如果你正在尝试构建一个能够自主执行复杂任务的AI智能体&#xff0c;那么你很可能已经体会过从零开始的痛苦&#xff1a;环境配置、框架选型、工具集成、API对接、日志管理……每一个环节都充满了选择与陷…...

TI AM5708异构多核开发板工业应用实战:从硬件解析到DSP协同编程

1. 项目概述&#xff1a;从申请到开箱&#xff0c;一次完整的工业级开发板体验最近在做一个工业视觉相关的预研项目&#xff0c;需要一块性能足够、接口丰富且稳定性有保障的处理器平台。市面上常见的消费级开发板在复杂电磁环境和长时间连续运行方面总是让人心里没底&#xff…...

别再死记硬背公式了!用Verilog手把手带你玩转DDS:从相位累加器到波形输出的保姆级仿真

从零构建DDS核心模块&#xff1a;Verilog实战与波形分析全解 在数字信号处理领域&#xff0c;直接数字频率合成(DDS)技术因其精确的频率控制和快速的切换速度&#xff0c;成为现代通信系统中的关键组件。不同于传统模拟振荡器&#xff0c;DDS通过纯数字方式生成信号&#xff0c…...

如何用Pearcleaner彻底清理Mac应用残留文件:开源免费的解决方案

如何用Pearcleaner彻底清理Mac应用残留文件&#xff1a;开源免费的解决方案 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner 你是否曾经在删除Mac应用后&…...

开源工具picprose:AI驱动的图片处理与文案生成一体化解决方案

1. 项目概述与核心价值最近在折腾个人博客和内容创作时&#xff0c;我遇到了一个挺普遍但又很烦人的问题&#xff1a;手头有一堆图片&#xff0c;但要么尺寸不合适&#xff0c;要么色调不统一&#xff0c;要么就是缺少一个能吸引眼球的标题。手动处理吧&#xff0c;费时费力&am…...

SDR++软件定义无线电入门终极指南:从零开始掌握跨平台SDR接收

SDR软件定义无线电入门终极指南&#xff1a;从零开始掌握跨平台SDR接收 【免费下载链接】SDRPlusPlus Cross-Platform SDR Software 项目地址: https://gitcode.com/GitHub_Trending/sd/SDRPlusPlus 想要探索无线电世界的奥秘却不知从何入手&#xff1f;SDR这款轻量级、…...

对比直接采购与使用Token Plan套餐在长期项目中的成本观感

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比直接采购与使用Token Plan套餐在长期项目中的成本观感 在持续需要大模型API的中长期项目中&#xff0c;成本的可预测性和可控性…...

R公司摆线针轮减速机装配线优化【附代码】

✨ 长期致力于装配线优化、多目标优化、改进粒子群算法、Flexsim仿真研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;基于工业工程的装配线瓶颈识别与…...

企业内训系统集成AI助教时如何通过Taotoken实现用量审计与风控

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 企业内训系统集成AI助教时如何通过Taotoken实现用量审计与风控 当企业将大模型能力以AI助教的形式集成到内部学习平台时&#xff0…...

glm-switch:ChatGLM多版本模型一键切换与环境管理工具详解

1. 项目概述与核心价值 最近在折腾大语言模型本地部署和推理时&#xff0c;遇到了一个挺实际的问题&#xff1a;手头有几个不同版本的 ChatGLM 模型权重文件&#xff0c;比如 GLM-6B、GLM-10B&#xff0c;还有社区微调过的各种版本。每次想切换模型做测试或者对比效果&#xf…...

2026年金融性能测试平台选型推荐:安全合规与高稳定性适配指南

金融行业是关键行业&#xff0c;其系统涉及资金交易、用户信息、风控数据等核心敏感信息&#xff0c;对性能测试平台的要求较高&#xff0c;核心聚焦四大维度&#xff1a;高稳定性&#xff0c;支撑核心交易系统 724 小时稳定运行&#xff0c;无卡顿、无崩溃&#xff1b;安全合规…...