【sylar-webserver】6 IO协程调度模块

文章目录

  • 设计
  • 知识点

设计

IO协程调度模块,整个项目里最重要的模块~

和 协程调度模块 相比,增加了 IO 事件的 触发条件。

所以需要重新封装 Event 事件, 通过 epoll_wait 监测触发事件(重新实现了idle), addEvent,addConditionEvent, delEvent ~

// 省略 互斥 和 ptr
class IOManager : public Scheduler{
public:// IO事件,使用 epoll 事件的定义// 和 epoll_event 一样,可以使用 | 操作。enum Event{NONE = 0x0,READ = 0x1,WRITE = 0x4,}
private:// 重新封装了一遍 带事件触发的fd。类似于read,write ~// 这里和hook模块里的 fd_manager不太一样。// fd_manager是侧重于 管理所有的 fd,以及记录是否是socket类型// FdContext 侧重于记录 触发条件 以及 触发事件。struct FdContext{// 封装 执行事件回调的调度器,回调协程,回调函数。struct EventContext{Scheduler* scheduler = nullptr;Fiber::ptr fiber;std::function<void()> cb;};EventContext& getEventContex(Event event);void resetEventContext(EventContext& ctx);void triggerEvent(Event event);// 读事件上下文EventContext read;// 写事件上下文EventContext write;// 事件关联句柄int fd = 0;// 注册事件Event events = NONE;};
};

知识点

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

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

相关文章

6.2、认证主要产品与应用

目录 认证主要产品认证产品主要技术指标认证技术应用认证技术应用 - 校园网应用认证技术应用 - 网络路由认证认证技术应用 - 用户登录设备认证技术应用 - 人脸识别门禁与eID 认证主要产品 应用认证产品主要形态有三种&#xff0c;硬件模式、软件模式和软硬相结合。硬件比如说认…

一套SaaS多租户医疗云his源码,基于云计算的医院信息管理系统(云HIS)

基于云计算的医院信息管理系统&#xff08;云HIS&#xff09;&#xff0c;通过SaaS服务模式提供。这种云HIS系统设计考虑了模板化、配置化、智能化和可扩展性&#xff0c;覆盖了基层医疗机构的核心工作流程&#xff0c;并且能够与监管系统无缝对接&#xff0c;满足未来的扩展需…

人工智能技术全景图谱:从基础理论到前沿应用

人工智能技术全景图谱&#xff1a;从基础理论到前沿应用 一、AI发展历程与学科体系 1.1 人工智能三大学派 符号主义&#xff08;Symbolicism&#xff09; 逻辑推理&#xff1a;一阶谓词逻辑知识表示&#xff1a;语义网络、框架系统 连接主义&#xff08;Connectionism&#…

基于杜鹃鸟鲶鱼优化(Cuckoo Catfish Optimizer,CCO)算法的多个无人机协同路径规划(可以自定义无人机数量及起始点),MATLAB代码

一、杜鹃鸟鲶鱼优化算法 杜鹃鸟鲶鱼优化&#xff08;Cuckoo Catfish Optimizer&#xff0c;CCO&#xff09;算法模拟了杜鹃鸟鲶鱼的搜索、捕食和寄生慈鲷行为。该算法的早期迭代侧重于执行多维包络搜索策略和压缩空间策略&#xff0c;并结合辅助搜索策略来有效限制慈鳔的逃逸空…

FPGA_DDS_IP核

接下来对FPGA的DDS的ip核进行学习。 首先对DDS需要有些了解 DDS信号发生器采用直接数字频率合成&#xff08;Direct Digital Synthesis&#xff0c;简称DDS&#xff09;技术&#xff0c;简单来说就是 需要一个系统频率和一个输入的数字数据 &#xff0c;用这个系统频率计算出…

dbeaver连接mongodb 插入日期变成了字符串

dbeaver插入mongodb数据 日期默认使用ISODate处理&#xff0c;但是插入数据以后实际上是ISODate(2025-03-03T03:25:19.640Z)字符串 INSERT INTO xxx.aaa (_id, chatId, buddyId, pId, lastChatId, inspiration, createTime, modelType, version, selectedInspiration, _class)…

微服务管理 - NACOS学习

为什么了解&#xff0c;工作中会使用这个工具进行微服务管理。 入门介绍&#xff1a; Nacos 是阿里巴巴开源的一款专注于动态服务发现、配置管理和服务管理的平台&#xff0c;主要用于简化云原生应用架构中的微服务开发与运维。它帮助开发者实现服务的自动注册与发现、实时配置…

外贸独立站相关知识扫盲

常见的外贸独立站类型 B2B外贸独立站&#xff1a;主要面向企业客户&#xff0c;展示公司产品、服务和解决方案&#xff0c;促进企业间贸易。例如&#xff0c;使用WordPress搭建的B2B外贸独立站&#xff0c;可以灵活展示产品信息、发布行业资讯、提供在线询盘功能等。 B2C外贸…

libpng-1.6.47-windows编译

本文操作按照《c&c开源库编译指南》中内容规范编写&#xff0c;编译环境配置、工具下载、目录规划&#xff0c;及更多其他开源库编译方法请参考该文章。 c&c开源库编译指南&#xff1a;https://blog.csdn.net/binary0006/article/details/144086155 本文章中的源代码已…

[250324] Kafka 4.0.0 版本发布:告别 ZooKeeper,拥抱 KRaft!| Wine 10.4 发布!

目录 Kafka 4.0.0 版本发布&#xff1a;告别 ZooKeeper&#xff0c;拥抱 KRaft&#xff01;Wine 10.4 发布&#xff01; Kafka 4.0.0 版本发布&#xff1a;告别 ZooKeeper&#xff0c;拥抱 KRaft&#xff01; 近日&#xff0c;Apache Kafka 4.0.0 正式发布&#xff01;这是一个…

linux安装配置Nacos

环境&#xff1a;centos7、mysql8.0、nacos2.5.1 1.下载Nacos安装包 https://github.com/alibaba/nacos/releases?spm5238cd80.72a042d5.0.0.46bacd36C42EfG 我这边选的是最新的稳定版本2.5.1 2. 放到 linux 服务器中解压安装 解压 tar -xvf nacos-server-2.5.1.tar.gz 进入…

元宇宙浪潮下,数字孪生如何“乘风破浪”?

在当今科技飞速发展的时代&#xff0c;元宇宙的概念如同一颗璀璨的新星&#xff0c;吸引了全球的目光。元宇宙被描绘为一个平行于现实世界、又与现实世界相互影响且始终在线的虚拟空间&#xff0c;它整合了多种前沿技术&#xff0c;为人们带来沉浸式的交互体验。而数字孪生&…

[Effective C++]条款24:若所有参数皆需类型转换,请为此采用non-menber函数

. 1、操作符重载&隐式类型转换 C中&#xff0c;操作符重载可以通过成员函数或非成员函数来实现。当操作符重载是成员函数时&#xff0c;左操作数必须是该类的对象。如果左操作数不是该类的对象&#xff0c;而是需要进行隐式转换的类型&#xff0c;编译器将无法找到匹配的成…

C++———— Vector

一、vector的介绍及使用 1.1 vector的介绍 1.2 vector 的使用 1.21 vector的定义 演示&#xff1a; 1.22 vector iterator 的使用 1.beginend 主要作用&#xff1a;获取第一个数据位置的迭代器和最后一个数据的下一个位置的迭代器。 演示&#xff1a; 2.rbeginrend 主要…

STL入门

STL入门 作者&#xff1a;blue 时间&#xff1a;2024.3 文章目录 STL入门0.概述1.pair2.set(集合)3.vector4.string字符串类型5.queue&#xff0c;deque&#xff0c;priority_queue6.list的用法 0.概述 本文讨论部分常用的STL的运用 1.pair pair是将2个数据组合成一组数据…

洛谷 P10463 Interval GCD Solution

Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1​,a2​,⋯,an​)&#xff0c;有 m m m 个操作分两种&#xff1a; add ⁡ ( l , r , k ) \operatorname{add}(l,r,k) add(l,r,k)&#xff1a;对每个 i ∈ [ l , r ] i\in[l,r] i∈[l,r] 执行 …

从声源定位(DOA)算法仿真到工程源码实现-第八节

一、概述 本节我们记录在respeaker core v2 开发板上部署一个完整的声源定位(DOA)系统&#xff0c;演示可以看第一节中的视频。整个模块可以分为三部分&#xff0c;第一部分为控制开发板上的LED灯显示&#xff0c;这样可以实时的测试算法的效果&#xff1b;第二部分为从ALSA上取…

在linux部署网站

在Linux部署网站&#xff0c;需要准备一个纯净的系统 一、系统环境准备 1.设置静态IP地址 ‌ 2.关闭默认防火墙 systemctl disable firewalld --now ‌ 3.配置SSH密钥登录 4.yum update -y && reboot # 更新系统内核 5.yum install -y wget curl unzip # 安装…

Java后端API限流秘籍:高并发的防护伞与实战指南

目录导航 📜 🛡️ 为什么需要API限流?🧠 主流限流算法大解析👩‍💻 阿里巴巴的限流实践📏 四大黄金定律🤼 限流策略组合拳🏆 限流场景实战💻 技术实现方案🌟 最佳实践分享📈 结语与展望📚 推荐阅读 1. 🛡️ 为什么需要API限流? 在高并发环境中,未…

OpenGL ES 2.0与OpenGL ES 3.1的区别

如果硬件支持且需要更高质量的图形效果&#xff0c;推荐3.1&#xff1b;如果兼容性和开发简便更重要&#xff0c;且效果需求不高&#xff0c;2.0更合适。不过现代车载系统可能越来越多支持3.x版本&#xff0c;所以可能倾向于使用3.1&#xff0c;但具体情况还需调查目标平台的硬…