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

做影视网站 片源从哪里来做网上竞猜网站合法吗

做影视网站 片源从哪里来,做网上竞猜网站合法吗,关于网站建设投稿,公司支付的网站建设如何入账文章目录 七、进程间通信1. 进程间通信分类管道 未完待续 七、进程间通信 1. 进程间通信分类 管道 管道的四种情况#xff1a; ①管道内部没有数据#xff0c;并且具有写端的进程没有关闭写端#xff0c;读端就要阻塞等待#xff0c;知道管道pipe内部有数据。 ②管道内部… 文章目录 七、进程间通信1. 进程间通信分类管道 未完待续 七、进程间通信 1. 进程间通信分类 管道 管道的四种情况 ①管道内部没有数据并且具有写端的进程没有关闭写端读端就要阻塞等待知道管道pipe内部有数据。 ②管道内部被写满并且具有读端的继承没有关闭读端写端写满管道pipe后就需要阻塞等待直到管道清空。 ③对于写端而言关闭了写端管道读端会将管道pipe中的数据读完最后会读到返回值0表示读取完毕。 ④对于读端而言关闭了读端管道操作系统会直接终止具有写端的进程通过十三号信号 SIGPIPE 杀掉进程。 管道的五种特性 ①自带同步机制 ②通过血缘关系进程进行通信常见为父子进程 ③pipe是面向字节流的 ④父子退出管道自动释放文件的生命周期是随进程的 ⑤管道只能单向通信 我们曾经学的命令行管道 | 本质上就是pipe。 接下来我们根据我们所学的管道知识来实现一个 进程池 。 Makefile processpool:processpool.ccg -o $ $^ -stdc11 -g .PHONY:clean clean:rm -f processpool任务文件 task.hpp #pragma once#include iostream #include unistd.h using namespace std;// 函数指针类型 typedef void (*work_t)(int); typedef void (*task_t)(int, pid_t);void PrintLog(int fd, pid_t pid) {cout sub process: pid , fd : fd , task is : print log task\n endl; }void ReloadConf(int fd, pid_t pid) {cout sub process: pid , fd : fd , task is : reload conf task\n endl; }void ConnectMysql(int fd, pid_t pid) {cout sub process: pid , fd : fd , task is : connect mysql task\n endl; }// 任务列表 task_t tasks[3] {PrintLog, ReloadConf, ConnectMysql};// 随机选择一个任务 uint32_t NextTask() {return rand() % 3; }// 执行任务 void worker(int fd) {while (true){uint32_t task_id 0;ssize_t n read(0, task_id, sizeof(task_id));if (n sizeof(task_id)){if (task_id 3) continue;tasks[task_id](fd, getpid());}else if (n 0){cout sub process: getpid() exit endl;break;}} }进程池主逻辑 processpool.cc #include iostream #include string #include unistd.h #include cstdlib #include vector #include ctime #include sys/wait.h #include task.hpp using namespace std;// 枚举错误类型 enum {UsageError 1,ArgError,PipeError };// 打印使用说明 void Usage(const std::string proc) {cout Usage: proc number of processes endl; }// 将信道信息封装成一个类 class Channel { public:Channel(int wfd, pid_t sub_id, const string name): _wfd(wfd), _sub_process_id(sub_id), _name(name){}string name(){return _name;}int wfd(){return _wfd;}pid_t pid(){return _sub_process_id;}void Close(){close(_wfd);}~Channel() {} private:// 信道的写端int _wfd;// 子进程的idpid_t _sub_process_id;// 信道的编号名称string _name; };// 进程池管理类 class ProcessPool { public:ProcessPool(int num_processes): _num_processes(num_processes){}// 创建子进程和信道int CreateProcess(work_t work){for (int i 0; i _num_processes; i){// 创建管道int pipefd[2]{0};int n pipe(pipefd);if (n 0)return PipeError;// 创建子进程pid_t id fork();if (id 0){// 这里是子进程, 读端close(pipefd[1]);// 这里需要注意的是, 子进程需要从父进程那里接收任务, 所以需要将父进程的写端重定向到标准输入dup2(pipefd[0], 0);// 子进程执行任务work(pipefd[0]);exit(0);}string cname Channel- to_string(i);// 这里是父进程, 写端close(pipefd[0]);// 放到vector中管理起来_channels.push_back(Channel{pipefd[1], id, cname});}return 0;}// 向下一个信道发送任务(目的是负载均衡)int NextChannel(){static int next 0;int c next;next % _num_processes;return c;}// 向index进程执行code任务void SendTaskCode(int index, uint32_t code){cout send code: code to _channels[index].name() sub process id: _channels[index].pid() endl;// 父进程向管道内发送任务让子进程读取任务write(_channels[index].wfd(), code, sizeof(code));}// 杀死所有子进程void KillAll(){for (auto c : _channels){// 父进程关闭写端子进程读端读到0会自动结束进程c.Close();cout c.name() close done, sub process id: c.pid() endl;}}// 等待所有子进程退出void WaitAll(){for (auto c : _channels){pid_t pid c.pid();// 回收子进程返回信息pid_t rid waitpid(pid, nullptr, 0);if (rid pid){cout c.name() sub process id: c.pid() exit done endl;}}}~ProcessPool() {} private:// 进程池的大小int _num_processes;// 信道管理容器vectorChannel _channels; };// 控制进程池 void CtrlProcessPool(ProcessPool* pp, int cnt) {while (cnt){// 选择通道int c pp-NextChannel();// 选择任务uint32_t code NextTask();// 发送任务到子进程pp-SendTaskCode(c, code);sleep(1);cnt--;} }int main(int argc, char *argv[]) {if (argc ! 2){Usage(argv[0]);return UsageError;}int num_processes std::stoi(argv[1]);if (num_processes 1 || num_processes 5)return ArgError;srand((unsigned)time(nullptr));// 创建进程池对象ProcessPool* pp new ProcessPool(num_processes);// 创建子进程和信道pp-CreateProcess(worker);// 控制子进程执行指定数量的任务CtrlProcessPool(pp, 10);// 让所有的子进程退出pp-KillAll();// 回收子进程资源pp-WaitAll();return 0; }未完待续
http://www.hkea.cn/news/14545555/

相关文章:

  • 济南优化网站基层建设 网站
  • 网站开发工程师职责怎样给网站做关键词优化
  • 哈尔滨关键词优化排行企业seo顾问
  • 强企网做网站中国建筑是国企还是央企
  • 南海网站建设公司com域名是哪个国家的
  • 百度商桥怎样绑定网站wordpress the_terms
  • 有没有让人做问卷的网站广东石油化工建设集团公司网站
  • 程序员开源网站荆州seo技术厂家
  • 天眼查网站建设公司韶关住房和城乡建设局网站
  • 自己做响应式网站难吗为什么做电影网站没有流量
  • 企业网站 单页织梦手机网站制作
  • 网站开发台州重庆顶呱呱网站建设
  • 动易网站地图盈利网站
  • 安徽经工建设集团网站中国建筑企业
  • 做企业网站怎么样电商如何推广产品
  • 网站建设与管理管理课程新媒体是什么
  • 宿迁网站建设排名wordpress 微博 主题
  • 宿迁网站建设怎么收费教育类网站开发公司
  • 网站开发都有哪些新手小白如何互联网创业
  • 贵州省建设银行招聘网站免费的黄冈网站有哪些平台可以用微信支付
  • 做网站在阿里云上面买哪个服务常州专业做网站公司
  • 怎么建免费论坛网站iis网站跳转
  • 丽江古城区建设局网站WordPress长文章索引插件
  • 网站由哪些部分组成互联网内容服务商
  • 类似淘宝的网站怎么做的深圳百度seo优化
  • 电子商务网站设计规划书网站建设以及seo
  • 禅城区企业网站建设百度问答入口
  • 北京平台网站建设价格商丘整站优化
  • 让别人做网站的步骤温州网站设计服务商
  • 湖北建设部网站官网这个域名的网站做违法的事