




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 分享者 刘建平MSN 基于协程的网络开发框架设计 2 内容概要 1 协程概念2 C10K提出的问题与对策3 调度4 网络框架的设计原则5 简单实现6 FAQ 3 协程 协程概念 和子例程一样 协程也是一种程序组件 协程比子例程更一般化 子例程的起始处是惟一的入口点 协程的起始处是第一个入口点 在协程里 返回点之后是接下来的入口点 子例程的生命期遵循后进先出 最后一个被调用的子例程最先返回 相反 协程的生命期完全由他们的使用的需要决定 因为相对于子例程协程可以有多个入口和出口点 可以用协程来实现任何的子例程 事实上 正如Knuth所说 子例程是协程的特例 参考 http zh wikipedia org wiki 协程 4 生产者消费者例子 varq newqueue生产者协程 producer loopwhileqisnotfullcreatesomenewitemsaddtheitemstoqyieldtoconsumer 协程切换消费者协程 consumer loopwhileqisnotemptyremovesomeitemsfromqusetheitemsyieldtoproducer 协程切换 每个协程在用yield命令向另一个协程交出控制时都尽可能做了更多的工作 放弃控制使得另一个例程从这个例程停止的地方开始 但因为现在队列被修改了所以他可以做更多事情 尽管这个例子常用来介绍多线程 实际没有必要用多线程实现这种动态 yield语句可以通过由一个协程向另一个协程直接分支的方式实现 5 协程 切换自由除了第一入口点 外还有很多其它入口点 缺点 特点 切换自由除了第一入口点 外还有很多其它入口点协成调度必须自主控制 增加开发难度 6 各种子例程切换开销对比 7 协程使用的常见场景 生产器 角色模型 状态机 在一个子例程里实现状态机 这里状态由该过程当前的出口 入口点确定 这可以产生可读性更高的代码 并行的角色模型 例如计算机游戏 每个角色有自己的过程 这又在逻辑上分离了代码 但他们自愿地向顺序执行各角色过程的中央调度器交出控制 这是合作式多任务的一种形式 它有助于输入 输出和对数据结构的通用遍历 8 协程 实现的开发语言SimulaModula 2C StacklessPythonLuaLoC语言的实现http www chiark greenend org uk sgtatham coroutines htmlhttp xmailserver org libpcl htmlhttp software schmorp de pkg libcoro html 9 内容概要 1 协程概念2 C10K提出的问题与对策3 调度4 网络框架的设计原则5 简单实现6 FAQ 10 C10K 问题描述主要表现 网络服务在处理数以万计的客户端连接时 往往出现效率低下甚至完全瘫痪 这被称为C10K问题设计不够良好的程序 其性能和连接数及机器性能的关系往往是非线性的 参考 11 C10K 系统改进参考 poll epoll kqueue 12 C10K 高性能网络服务参考 http pl atyp us content tech servers html性能低下的四要害DatacopyContextswitchesMemoryallocationLockcontention 13 内容概要 1 协程概念2 C10K提出的问题与对策3 调度4 网络框架的设计原则5 简单实现6 FAQ 14 调度 哲学家就餐问题是用来演示并行计算和多线程同步时产生的问题 参考 http zh wikipedia org zh cn 哲学家就餐问题 15 调度 哲学家就餐问题的常见解法 服务生解法一个简单的解法是引入一个餐厅服务生 哲学家必须经过他的允许才能拿起餐叉 因为服务生知道哪只餐叉正在使用 所以他能够作出判断避免死锁 16 调度 把问题简化 哲学家现在只负责吃饭 不再思考 不思考的哲学家也就不是哲学家了 1 哲学家调度状况 所有哲学家不停的向服务生请求许可 许可获得后吃饭 服务生被频繁的请求 导致lockcontention问题2 服务生调度状况 不思考的哲学家也就不是哲学家了 那我们就把其当成不思考的普通人看待 还是服务生解法 服务生喂这些哲学家吃 但是一个服务生的情况下 只能同时喂一个哲学家吃饭 还有3个餐叉被闲置 如果是俩个服务生的话 就能很好的利用现有的资源 不停的给所有哲学家进餐 17 调度 协程线程 使用协程来模拟只会吃饭的哲学家使用线程来模拟服务员 具体分配几个服务员按照现有资源进行分配 18 调度 参考 http cvs schmorp de libcoro coro h Libcoro定义的协程操作API举例 typedefvoid coro func void typedefstructcoro contextcoro context voidcoro create coro context ctx anuninitialisedcoro context coro funccoro thecoroutinecodetobeexecuted void arg asinglepointerpassedtothecoro void sptr startofstackarea longssize sizeofstackarea voidcoro transfer coro context prev coro context next voidcoro destroy coro context ctx 19 内容概要 1 协程概念2 C10K提出的问题与对策3 调度4 网络框架的设计原则5 简单实现6 FAQ 20 网络开发框架的设计 目前流行的网络开发框架 ACELibevent libevBoostasio 开源软件ApatchHttpdNginx MemcachedMongoDB 21 网络开发框架的设计 个人原则 没有最好的开发框架 只有更适合的不要去重新发明轮子组装适合自己的组件 搭建自己的开发框架使用简单 避免误用 22 简单实现 网络组件 文件系统 内存管理 协程管理 调度控制 协程通信 线程管理 23 简单实现 网络组件文件系统组件基于协程的网络开发框架一定是异步开发框架 所以需要对底层系统级调用进行异
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国海油2025届校园招聘统一考试笔试参考题库附带答案详解
- 黑龙江省2025年黑龙江鹤城文化旅游投资集团有限公司社会公开招聘9人笔试历年参考题库附带答案详解
- 高要区2025广东肇庆市高要区融媒体中心招聘紧缺专业工作人员7人笔试历年参考题库附带答案详解
- 语文教师针对性教学方案设计范例
- 第一节 楞次定律教学设计-2025-2026学年高中物理选择性必修第二册沪科版(2020·上海专用)
- 柳江区2025广西柳州市柳江区文联招聘编外聘用人员1人笔试历年参考题库附带答案详解
- Unit 7 Integration 教学设计 译林版(2024)七年级英语上册
- 无锡市2025年江苏无锡商业职业技术学院公开招聘工作人员35人笔试历年参考题库附带答案详解
- 企业产品溢价策略方案与实操技巧
- 广西壮族自治区2025广西壮族自治区三五核地质大队招聘实名编制工作人员13人笔试历年参考题库附带答案详解
- 2024团校考试入团考试题库(含答案)
- 22G101三维立体彩色图集
- 现场复核记录
- 学校安全风险辨识管控清单
- 植物生理学植物的抗逆境生理
- 渔业资源与渔场学PPT完整全套教学课件
- 质量效率辩证关系
- 二手车鉴定评估报告表
- 设计思维方法与表达(高职艺术设计)PPT完整全套教学课件
- 金融随机分析2课后答案
- 中医病证诊断疗效标准
评论
0/150
提交评论