基于协程的网络开发框架的设计与实现参考.pptVIP

基于协程的网络开发框架的设计与实现参考.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于协程的网络开发框架的设计与实现参考

谢谢大家! 假设有五位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一:吃饭,或者思考。吃东西的时候,他们就停止思考,思考的时候也停止吃东西。餐桌中间有一大碗意大利面,每两个哲学家之间有一只餐叉。因为用一只餐叉很难吃到意大利面,所以假设哲学家必须用两只餐叉吃东西。他们只能使用自己左右手边的那两只餐叉。 哲学家从来不交谈,这就很危险,可能产生死锁,每个哲学家都拿着左手的餐叉,永远都在等右边的餐叉(或者相反) * 分享者:刘建平 MSN: @ 基于协程的网络开发框架设计 内容概要 1. 协程概念 2. C10K提出的问题与对策 3. 调度 4. 网络框架的设计原则 5. 简单实现 6. FAQ 协程 协程概念 和子例程一样,协程也是一种程序组件。 协程比子例程更一般化。 子例程的起始处是惟一的入口点; 协程的起始处是第一个入口点,在协程里,返回点之后是接下来的入口点。? ? ? ? ? 子例程的生命期遵循后进先出(最后一个被调用的子例程最先返回); 相反,协程的生命期完全由他们的使用的需要决定。? ? ? ? ? ? ? ? ? 因为相对于子例程协程可以有多个入口和出口点,可以用协程来实现任何的子例程。 事实上,正如 Knuth 所说:“子例程是协程的特例。” 生产者消费者例子 var q?:= new queue 生产者协程(producer) loop while q is not full create some new items add the items to q yield to consumer #协程切换 消费者协程 (consumer) loop while q is not empty remove some items from q use the items yield to producer #协程切换 每个协程在用yield命令 向另一个协程交出控制 时都尽可能做了更多的 工作。 放弃控制使得另一个 例程从这个例程停止 的地方开始,但因为 现在队列被修改了 所以他可以做更多 事情。 尽管这个例子常用来 介绍多线程,实际没有 必要用多线程实现 这种动态: yield语句可以通过 由一个协程向另一个 协程直接分支的方式 实现。 协程 切换自由 除了第一入口点,外还有很多其它入口点 缺点 特点 切换自由 除了第一入口点,外还有很多其它入口点 协成调度必须自主控制,增加开发难度 各种子例程切换开销对比 子例程 地址空间 表项 私有数据 栈空间 执行点 进程 ? ? ? ? ? 线程 ? ? ? ? 协程 ?【?】 ?【?】 ? ? 协程使用的常见场景 生产器 角色模型 状态机 在一个子例程里实现状态机,这里状态由该过程当前的 出口/入口点确定;这可以产生可读性更高的代码。 并行的角色模型,例如计算机游戏。每个角色有自己的过程(这又在逻辑上分离了代码),但他们自愿地向顺序执行各角色过程的中央调度器交出控制(这是合作式多任务的一种形式) 它有助于输入/输出和对数据结构的通用遍历。 协程 实现的开发语言 Simula Modula-2 C# Stackless Python Lua Lo C语言的实现 .uk/~sgtatham/coroutines.html? ? ? ? ?? /libpcl.html http://software.schmorp.de/pkg/libcoro.html? ? 内容概要 1. 协程概念 2. C10K提出的问题与对策 3. 调度 4. 网络框架的设计原则 5. 简单实现 6. FAQ C10K 问题描述 主要表现 网络服务在处理数以万计的客户端连接时,往往出现效率低下甚至完全瘫痪,这被称为?C10K问题 设计不够良好的程序,其性能和连接数及机器性能的关系往往是非线性的。 参考:?/c10k.html? C10K 系统改进 参考:?/c10k.html 同步API =》 异步API linux 2.6 增加 AIO windows 提供 IOCP select ? ? =》 poll/epoll/kqueue C10K 高性能网络服务 参考:http://pl.atyp.us/content/tech/servers.html 性能低下的四要害 Data copy Context switches Memory allocation Lock contention 内容概要 1. 协程概念 2. C10K提出的问题与对策 3. 调度 4. 网络框架的设计原则 5. 简单实现 6. FAQ 调度 哲学家就餐问题是用来演示并行计算和多线程同步时产生的问题 ? 参考:?/zh-cn/哲学家

您可能关注的文档

文档评论(0)

feixiang2017 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档