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

成都专业网站制作网站广告sdk接入

成都专业网站制作网站,广告sdk接入,哪几个网站做acm题目比较好,wordpress 经典网站文章目录 🚀 基于Linux管道通信的进程池设计与实现一、项目概述二、完整代码实现1. 📁 任务定义头文件(Task.h)2. 💻 主程序(ProcessPool.cc) 三、🔧 关键技术解析1. 管道生命周期管…

文章目录

  • 🚀 基于Linux管道通信的进程池设计与实现
    • 一、项目概述
    • 二、完整代码实现
      • 1. 📁 任务定义头文件(Task.h)
      • 2. 💻 主程序(ProcessPool.cc)
    • 三、🔧 关键技术解析
      • 1. 管道生命周期管理
      • 2. 进程池初始化流程
      • 3. 任务分发机制

在这里插入图片描述

🚀 基于Linux管道通信的进程池设计与实现


一、项目概述

本文实现了一个基于匿名管道的多进程任务处理系统,核心功能包括:

  • 进程池管理:动态创建/销毁子进程 🛠️
  • 任务分发:通过管道发送控制指令 📨
  • 资源回收:自动清理僵尸进程 ♻️
  • 错误处理:管道断裂信号处理 🛑

二、完整代码实现

1. 📁 任务定义头文件(Task.h)

#pragma once
#include <iostream>
#include <functional>
#include <vector>using func = std::function<void()>;// 🏭 任务工厂函数
func createLogTask() {return []{ std::cout << "🪵 [LOG] Updating system logs" << std::endl;};
}func createRenderTask() {return []{ std::cout << "🖥️ [RENDER] Refreshing display" << std::endl;};
}// 📥 加载任务到全局容器
void loadTasks(std::vector<func>* tasks) {tasks->push_back(createLogTask());tasks->push_back(createRenderTask());
}

2. 💻 主程序(ProcessPool.cc)

#include "Task.h"
#include <unistd.h>
#include <vector>
#include <sys/wait.h>
#include <signal.h>const int WORKER_NUM = 4;
std::vector<func> g_tasks;// 📡 通信管道封装
struct Channel {int write_fd;       // 父进程写端pid_t pid;          // 子进程PIDstd::string name;Channel(int fd, pid_t p, const std::string& n): write_fd(fd), pid(p), name(n) {}
};// 🔄 子进程工作循环
void workerMain() {while(true) {int cmd = 0;ssize_t n = read(STDIN_FILENO, &cmd, sizeof(cmd));if(n <= 0) { // 管道关闭或错误std::cerr << "🔌 Worker " << getpid() << " exiting" << std::endl;break;}if(cmd >= 0 && cmd < g_tasks.size()) {std::cout << "👷 Worker " << getpid() << " executing task " << cmd << std::endl;g_tasks[cmd](); // 执行注册任务}}exit(EXIT_SUCCESS);
}// 🏗️ 初始化进程池
std::vector<Channel> createWorkers() {std::vector<Channel> workers;std::vector<int> old_fds;for(int i=0; i<WORKER_NUM; ++i) {int pipefd[2];pipe(pipefd); // 创建新管道pid_t pid = fork();if(pid == 0) { // 子进程for(int fd : old_fds) close(fd); // 关闭旧管道close(pipefd[1]); // 关闭写端dup2(pipefd[0], STDIN_FILENO); // 重定向标准输入close(pipefd[0]);workerMain(); // 永不返回}// 父进程close(pipefd[0]); // 关闭读端workers.emplace_back(pipefd[1], pid, "worker-"+std::to_string(i));old_fds.push_back(pipefd[1]);}return workers;
}// 📨 发送控制指令
void dispatchTasks(const std::vector<Channel>& workers) {for(const auto& w : workers) {int cmd = rand() % g_tasks.size();if(write(w.write_fd, &cmd, sizeof(cmd)) != sizeof(cmd)) {perror("❌ Write task failed");}}
}// 🧹 清理资源
void cleanupWorkers(const std::vector<Channel>& workers) {for(const auto& w : workers) {close(w.write_fd);waitpid(w.pid, nullptr, 0);}
}int main() {signal(SIGPIPE, SIG_IGN); // 忽略管道断裂信号loadTasks(&g_tasks);auto workers = createWorkers();dispatchTasks(workers);sleep(1); // 等待任务完成cleanupWorkers(workers);return 0;
}

三、🔧 关键技术解析

1. 管道生命周期管理

// 👨💻 父进程
int pipefd[2];
pipe(pipefd);
close(pipefd[0]); // 只保留写端// 👶 子进程
close(pipefd[1]);
dup2(pipefd[0], STDIN_FILENO);
close(pipefd[0]);

设计要点

  • 每个Worker独占一个管道 🚪
  • 父进程持有所有写端文件描述符 🔑
  • 子进程通过标准输入读取指令 📥

2. 进程池初始化流程

graph TDA[主进程] --> B[🛠️ 创建管道1]B --> C[👶 fork子进程1]C --> D[🔀 重定向输入]D --> E[🔄 进入工作循环]A --> F[🛠️ 创建管道2]F --> G[👶 fork子进程2]G --> H[🗑️ 关闭旧管道]

3. 任务分发机制

void dispatchTasks(const std::vector<Channel>& workers) {for(const auto& w : workers) {int cmd = rand() % g_tasks.size();write(w.write_fd, &cmd, sizeof(cmd));}
}

工作流程

  1. 🎲 随机选择任务编号
  2. 📨 通过管道发送整型指令
  3. 👷 Worker解析指令执行对应任务


文章转载自:

http://GP3jEoZI.xkfrx.cn
http://cIxSIpbB.xkfrx.cn
http://mmInMBBQ.xkfrx.cn
http://bKHvsFxa.xkfrx.cn
http://cqHXLEba.xkfrx.cn
http://LSNPZLMh.xkfrx.cn
http://JXkBe3dW.xkfrx.cn
http://iFaYgdMQ.xkfrx.cn
http://7aHTxRbR.xkfrx.cn
http://8Zv58LBp.xkfrx.cn
http://S5OpYamQ.xkfrx.cn
http://JPezUdtv.xkfrx.cn
http://t4anxv4i.xkfrx.cn
http://lGuGfRRy.xkfrx.cn
http://Ou6BDFoY.xkfrx.cn
http://sa1lxyUc.xkfrx.cn
http://6Mk2Zrof.xkfrx.cn
http://SOO1R6Sa.xkfrx.cn
http://pZ38URmA.xkfrx.cn
http://8LCPtZVA.xkfrx.cn
http://cY2yio6A.xkfrx.cn
http://QNdcQnoQ.xkfrx.cn
http://eA9n2YmT.xkfrx.cn
http://wxoEtZ1y.xkfrx.cn
http://fgbv0uw2.xkfrx.cn
http://oBWCCnzF.xkfrx.cn
http://1uAx8cMB.xkfrx.cn
http://pGBiZI12.xkfrx.cn
http://ZwXPJJpM.xkfrx.cn
http://WRkh4LBs.xkfrx.cn
http://www.dtcms.com/wzjs/757509.html

相关文章:

  • 视觉差网站制作为什么自己花钱做的网站竟然不是自己的?(
  • 用dw设计网站模板下载湖南网站建设多少钱
  • 网站建设公司财务预算大连市建设工程老网站
  • 网站建设前期策划书哈尔滨做网站巨耀公司
  • 网站开发上海做网站被骗去哪投诉
  • 杭州建设信用平台seo的目的是什么
  • 装修设计公司公司价格表鹤壁网站seo
  • 曲阜网站设计成功的网络营销案例ppt
  • 做一个公司展示型网站多少钱深圳企业网站建设公司排名
  • 东莞市网站建设平台百度关键词权重查询
  • 如何建设成为营销网站秦皇岛建网站
  • 用手机做网站的app企业运营数据分析报告
  • 个人网站名称备案公司起名大全2020最新版的
  • 江苏网站建设wordpress的ip有什么用
  • 网站建设交易中心网站换域名怎么办
  • 国内旅行做行程网站wordpress丰富搜索页
  • 如何做网店网站河北项目建设备案网站
  • 网站收录系统网络营销课程个人总结3000字
  • 免费网站seo四川瑞通工程建设有限公司网站
  • 东莞网站建设公司辉煌大厦模仿网站制作
  • 长沙民政计算机网站建设聊城网站策划
  • 成都最新的防疫通告今天北京seo案例
  • 面签拍照 网站备案建筑人才网官方网站评职称
  • 爱站关键词挖掘查询工具太原网站建设口碑推荐
  • 自助建站加盟羽毛球赛事2022赛程
  • 河南专业网站建设公司哪家好如何部署thinkphp网站
  • 观澜专业做网站公司海外网络连接器
  • 网站建设有啥费用搜索引擎营销名词解释
  • vs2015 网站开发教程如何批量入侵WordPress站
  • 现在做网站用什么wordpress sql优化