资阳网站设计陕西省咸阳市建设银行网站

web/2025/10/6 19:16:18/文章来源:
资阳网站设计,陕西省咸阳市建设银行网站,easy ssl wordpress,青岛seo优化介绍 进程间通信的方式 1.Linux原生支持的管道----匿名和命名管道 2.System V-----共享内存、消息队列、信号量 3.Posix------多线程、网路通信 进程间通信目的 数据传输#xff1a;一个进程需要将它的数据发送给另一个进程 资源共享#xff1a;多个进程之间共享同样的资源。…介绍 进程间通信的方式 1.Linux原生支持的管道----匿名和命名管道 2.System V-----共享内存、消息队列、信号量 3.Posix------多线程、网路通信 进程间通信目的 数据传输一个进程需要将它的数据发送给另一个进程 资源共享多个进程之间共享同样的资源。 通知事件一个进程需要向另一个或一组进程发送消息通知它它们发生了某种事件如进程终止时要通知父进程。 进程控制有些进程希望完全控制另一个进程的执行如Debug进程此时控制进程希望能够拦截另一个进程的所有陷入和异常并能够及时知道它的状态改变 管道 原理 管道是单向通信的常用于有亲缘关系的父子间通信父进程调用pipe打开管道文件操作系统创建struct file结构体存有inode等文件信息父进程fd指向该文件父进程fork出子进程子进程也拷贝父进程的代码和fd同时fd指向管道分别关闭读端和写端从而实现单向通信。 创建管道 调用成功返回0失败返回-1。pipefd是输出型参数pipefd【0】为3pipefd【1】为4. 构建单向通信的读端子进程关闭写端 //2.create child processpid_t idfork();assert(id!-1);if(id0){//child process//3构建单向通行的信道pipe[0]:read,pipe[1]:write//3.1关闭子进程不需要的fdclose(pipefd[1]);char buffer[1025];while(true){ssize_t sread(pipefd[0],buffer,sizeof(buffer)-1);if(s0){buffer[s]0;coutchild get a message[getpid()]fatherbufferendl;}}exit(0);}写端父进程关闭读端 close(pipefd[0]);string message我是父进程我正在给你发消息;int count0;char send_buffer[1024];while(true){//3.2构建一个变化的字符串snprintf(send_buffer,sizeof(send_buffer),%s:%d,message.c_str(),count);//3.3写入write(pipefd[1],send_buffer,strlen(send_buffer));//3.4故意睡一会sleep(1);}pid_t retwaitpid(id,nullptr,0);assert(ret0);(void)ret;close(pipefd[1]);管道特点 1.常用于亲缘关系的父子间通信 2.提供访问控制例如管道无数据时读端就必须等数据写入 3.管道本质是内核中的一块缓冲区多个进程通过访问同一块缓冲区实现通信。 4. 管道提供的是面向流式的通信服务面向字节流需要定制协议来进行数据区分。 5.管道是基于文件的文件的生命周期是随进程的那么管道的生命周期也是随进程的。 6.管道是单向通信的就是半双工通信的一种特殊情况数据只能向一个方向流动。需要双方通信时需要建立起两个管道。半双工通信就是要么在收数据要么在发数据不能同时在收数据和发数据比如两个人在交流时一个人在说另一个人在听而全双工通信是同时进行收数据和发数据比如两个人吵架的时候相互问候对方一个人既在问候对方又在听对方的问候。 实现一个简易进程池 process.cc #includeiostream #includeunistd.h #includestdlib.h #includesys/wait.h #includesys/types.h #includeassert.h #includevector #includecstdlib #includetime.h #includeTask.hpp#define PROCESS_NUM 5using namespace std;int waitCommand(int waitFd,bool quit) {uint32_t command0;ssize_t sread(waitFd,command,sizeof(command));if(s0){quittrue;return -1;}assert(ssizeof(uint32_t));return command; }//给哪一个进程通过什么文件描述符发送什么命令 void sendAndWakeUp(pid_t who,int fd,uint32_t command) {write(fd,command,sizeof(command));coutcall processwhoexecutedesc[command]throughfdendl; }int main() {Load();vectorpairpid_t,int slots;//先创建多个进程for(int i0;iPROCESS_NUM;i){int pipefd[2]{0};int npipe(pipefd);assert(n0);(void)n;pid_t idfork();assert(id!-1);if(id0){//child读取关闭写端close(pipefd[1]);while(true){bool quitfalse;//pipefd[0]int commandwaitCommand(pipefd[0],quit);//如果不发则阻塞if(quit) break;if(command0commandhandlerSize()){callbacks[command]();}else{cout非法commandendl;}}exit(1);}close(pipefd[0]);slots.push_back(pairpid_t,int(id,pipefd[1]));}//开始任务srand((unsigned long)time(nullptr));while(true){int select,command;cout##############endl;cout1.show functionsendl;cout2.send commandendl;coutPlease select;cinselect;if(1select){showHandler();}else if(select2){coutEnter Your Command:;cincommand;//选择进程int choice_procIDrand()%slots.size();//布置任务给指定进程sendAndWakeUp(slots[choice_procID].first,slots[choice_procID].second,command);}}//关闭fd所有的子进程都会退出for(const auto slot:slots){close(slot.second);}//回收所有的子进程信息for(const auto slot: slots){waitpid(slot.first,nullptr,0);}return 0; }task.hpp #pragma once#includeiostream #includestring #includeunistd.h #includefunctional #includevector #includeunordered_maptypedef std::functionvoid() func;std::vectorfunc callbacks; std::unordered_mapint,std::string desc;void readMySQL() {std::coutprocess[getpid()]执行访问数据库的任务std::endl; }void execuleURL() {std::coutprocess[getpid()]执行url解析std::endl; }void cal() {std::coutprocess[getpid()]执行加密任务std::endl; }void save() {std::coutprocessgetpid()执行数据持久化任务std::endl; }void Load() {desc.insert({callbacks.size(),readMySQL});callbacks.push_back(readMySQL);desc.insert({callbacks.size(),execul});callbacks.push_back(execuleURL);desc.insert({callbacks.size(),cal});callbacks.push_back(cal);desc.insert({callbacks.size(),save});callbacks.push_back(save);}void showHandler() {for(const auto iter:desc){std::coutiter.first\titer.secondstd::endl;} }int handlerSize() {return callbacks.size(); }命名管道 引入 管道应用的一个限制就是只能在具有共同祖先具有亲缘关系的进程间通信。 如果我们想在不相关的进程之间交换数据可以使用FIFO文件来做这项工作它经常被称为命名管道。命名管道是一种特殊类型的文件。 区别打开方式是否存在于文件系统血缘 匿名管道不属于文件系统是一种特殊的文件只存在于内存中只能进行血缘关系间的通信。命名管道可用于无关联的进程间通信mkfifo函数调用后需用open打开因为它以FIFO文件的形式存在于文件系统中。 实现一个简易的客户端和服务端 //comm.hpp #ifndef _COMM_H #define _COMM_H#includeiostream #includestring #includesys/types.h #includesys/stat.h #includefcntl.h #includeunistd.h #includecstdio #includecstring #includelog.hppusing namespace std;string ipcPath./fifo.ipc; const int MODE0666; const int SIZE128;#endif//server.cc #includecomm.hppint main() {//1.创建命名管道if(mkfifo(ipcPath.c_str(),MODE)0){perror(mkfifo);exit(1);}Log(创建管道文件成功,Debug)step1endl;//2.打开命名管道int fdopen(ipcPath.c_str(),O_RDONLY);if(fd0){perror(open);exit(2);}Log(打开成功,Debug)step2endl;//3.读取数据char buf[SIZE];while(true){memset(buf,\0,sizeof(buf));ssize_t sread(fd,buf,sizeof(buf)-1);//\0不读if(s0){coutclient say:bufendl;}else if(s0){//EOFcerrclient quit!endl;break;}else{//errorperror(read);break;}}//4.关闭文件close(fd);unlink(ipcPath.c_str());Log(关闭成功,Debug)step 3endl;return 0; }//client.cc #includecomm.hpp int main() {//获取管道文件int fdopen(ipcPath.c_str(),O_WRONLY);if(fd0){perror(open);exit(1);}//ipc通信过程string buffer;while(true){coutplease input:endl;getline(cin,buffer);write(fd,buffer.c_str(),buffer.size());}close(fd);return 0; }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/88070.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站建设冷色调dw手机版下载安装

在php5.4版本之后有很多的函数与功能进行丢弃与升级功能了,现在国内很多CMS都还未按php5.4标准来做了,下面我整理了一些在ecshop在PHP 5.4以上版本各种错误问题处理. 1、PHP 5.4.X环境下安装ECShop出现“includes/cls_template.php on line 406…

app免费制作网站模板上海建站推广公司

目录 官方文档 简述 Aggregate的原型方法 aggregate进行操作 官方文档 Mongoose v8.0.3: Aggregate 简述 在 Mongoose 中,Aggregate 是用于执行 MongoDB 聚合操作的类。MongoDB 聚合操作是一种强大的数据处理工具,可以用于对集合中的文档进行变换和…

攀枝花市建设银行网站在线制作图片及图片处理工具免费

2 可见性 2.1 什么是可见性 可见性问题是基于CPU位置出现的,CPU处理速度非常快,相对CPU来说,去主内存获取数据这个事情太慢了,CPU就提供了 L1,L2,L3的三级缓存,每次去主内存拿完数据后&#x…

网站怎么制作成软件做网站基础源代码

1、QT通信机制为了更好的实现QT的信息交互,在QT系统中创建了较为完善的通信机制。QT的通信可分为QT内部通信和外部通信两大类。对于这两类通信机制及应用场合做如以下分析:(1)QT内部对象间通信在图形用户界面编程中,经常需要将一个窗口部件的…

淘宝客网站一定要备案视觉设计网站

Xsens动作捕捉技术助力于中国戏曲演员运动分析 搜维尔科技:Movella Xsens动作捕捉技术助力于中国戏曲演员运动分析

十大免费建站app怎样做网站初中生

目录 一,项目介绍 1.1 关于高并发内存池 1.2 关于池化技术 1.3 关于malloc 二,定长内存池实现 2.1 实现详情 ​2.2 完整代码 三,高并发内存池整体设计 四,threadcache设计 4.1 整体设计 4.2 哈希桶映射对齐规则 4.3 …

微信运营网站建设销售网站开发的背景

#做题方法# 进去之后做了简单的注入发现有错误回显,就进行注入发现过滤了sql语 后面进行了双写and payload: ?usernameadmin%27%20aandnd%20updatexml(1,concat(0x7e,dAtabase(),0x7e,version()),1)%20--&passwordadmi 接下来又 ?usernameadm…

和17做网店类似的货源网站外包公司催收合法吗

IDEA 中,"Scratches and Consoles" 是一个用于临时代码编辑和交互式开发的工具窗口,作用如下:Scratches(草稿):Scratches 是一个用于临时编写和运行代码片段的工具,你可以在其中创建临…

网站后台中表格制作网络广告的形式

卧龙吟有所有特性是没有详细说明或者说容易被大家忽视的,这些都是需要我们去挖掘的,对此,特意奉上辟邪剑谱一本。一,四季系统卧龙吟的时间轴系统中不仅仅是XX年开始可以国战,XX年开始海盗入侵,还有喜闻乐见…

网站有利于seo的细节dw网站导航怎么做

编者按:巨灾项目,作为国家公共安全体系的重要组成部分,对于提升我国防灾减灾能力具有举足轻重的意义。其中,地震预警作为巨灾项目的重要一环,其技术的创新与应用直接关系到人民群众的生命财产安全。云轴科技ZStack在国…

呼家楼做网站的公司哪家好2017网站开发发展前景

实例对象和构造函数的关系及原型: 实例对象是通过构造函数创建出来的,实例对象的构造器constructor就是指向构造函数的;每个实例对象中的同一方法的指向是各不相同的,但是其属性值相同的属性可以相同,这样会造成内存浪…

做网站建设的公司有哪些网页设计免费模板参考网页

文章目录 四大核心复习一、获取模块内的state数据1.目标:2.使用模块中的数据3.代码示例 二、获取模块内的getters数据1.目标:2.语法:3.代码演示 三、获取模块内的mutations方法1.目标:2.注意:3.调用方式:4.…

网站挂马解决池州网站建设

PC上不了网初步排查方案步骤 首先查看配置是否正确,是否使用自动获取(DHCP)IP,掩码,网关,如果不是,手动配置确认网关,子网掩码,IP是否配置正确,IP是否已有PC使…

什么是多页面网站wordpress调用分类描述

一,前言 RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。点击跳转RabbitM…

泗洪县建设局网站怎么查不到专业团队高清图片

前言hfish HFish是一款社区型免费蜜罐,侧重企业安全场景,从内网失陷检测、外网威胁感知、威胁情报生产三个场景出发,为用户提供可独立操作且实用的功能,通过安全、敏捷、可靠的中低交互蜜罐增加用户在失陷感知和威胁情报领域的能力。 HFish具有超过40种蜜罐环境、提供免费…

做服装零售上什么网站沈阳企业自助建站系统

Sky Guide是一款能让小伙伴们观察银河的手机软件,尤其是喜欢行星、星座的小伙伴们来讲,这款软件能很好的帮助小伙伴们观看这些,让小伙伴们体验不一样的观星乐趣,因此想要观看的小伙伴们,赶紧来试试吧。软件介绍&#x…

网站群 米拓互联网家装平台有哪些

本文作者:徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了在极狐GitLab 用户…

网站开发岗位职责网站维护需要做那些事

来源:国机智能机器人曾为现代互联网早期协议和架构设计做出贡献的Vint Cerf,用一个寓言来解释为什么在人工智能等新兴技术出现后,勇敢的领导力至关重要。想象一下,你住在一个被群山环绕的山谷底部的小社区里。在远处的山顶上有一块…

医院网站建设作用中国4台根服务器地点

表单 表单输入绑定 只需要v-model声明一下这个变量就可以。 还可以选择不同的类型&#xff0c;例如 type"checkbox“ v-model 也提供了 lazy、number、.trim 功能&#xff0c;只需要在v-model后面加入.lazy 例如&#xff1a;v-model.lazy”message“ <template><…

名片型网站开发网站首页面

大家都知道java中有很多的基础知识&#xff0c;需要大家花费一定的时间去消化。关于java中ConcurrentHashMap的扩容机制不知道大家是否了解过&#xff0c;其实内容也是很好理解的&#xff0c;一起来看看吧。首先&#xff0c;我们需要知道的是&#xff1a;1. 计算每个线程可以处…