ImageVerifierCode 换一换
格式:PPT , 页数:25 ,大小:1.19MB ,
资源ID:14337434      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/14337434.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于协程的网络开发框架的设计与实现PPT课件下载推荐.ppt)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于协程的网络开发框架的设计与实现PPT课件下载推荐.ppt

1、协程的起始处是第一个入口点,在协程里,返回点之后是接下来的入口点。子例程的生命期遵循后进先出(最后一个被调用的子例程最先返回);相反,协程的生命期完全由他们的使用的需要决定。因为相对于子例程协程可以有多个入口和出口点,可以用协程来实现任何的子例程。事实上,正如 Knuth 所说:“子例程是协程的特例。”,参考:http:/zh.wikipedia.org/wiki/协程,生产者消费者例子,var q:=new queue生产者协程(producer)loop while q is not full create some new items add the items to q yield t

2、o consumer#协程切换消费者协程(consumer)loop while q is not emptyremove some items from q use the items yield to producer#协程切换,每个协程在用yield命令向另一个协程交出控制时都尽可能做了更多的工作。放弃控制使得另一个例程从这个例程停止的地方开始,但因为现在队列被修改了所以他可以做更多事情。尽管这个例子常用来介绍多线程,实际没有必要用多线程实现这种动态:yield语句可以通过由一个协程向另一个协程直接分支的方式实现。,协程,切换自由除了第一入口点,外还有很多其它入口点,缺点,特点,切换自由

3、除了第一入口点,外还有很多其它入口点协成调度必须自主控制,增加开发难度,各种子例程切换开销对比,协程使用的常见场景,生产器,角色模型,状态机,在一个子例程里实现状态机,这里状态由该过程当前的出口入口点确定;这可以产生可读性更高的代码。,并行的角色模型,例如计算机游戏。每个角色有自己的过程(这又在逻辑上分离了代码),但他们自愿地向顺序执行各角色过程的中央调度器交出控制(这是合作式多任务的一种形式),它有助于输入输出和对数据结构的通用遍历。,协程,实现的开发语言SimulaModula-2C#Stackless PythonLuaLoC语言的实现http:/www.chiark.greenend.

4、org.uk/sgtatham/coroutines.html http:/xmailserver.org/libpcl.htmlhttp:/software.schmorp.de/pkg/libcoro.html,内容概要,1.协程概念2.C10K提出的问题与对策3.调度4.网络框架的设计原则5.简单实现6.FAQ,C10K,问题描述主要表现,网络服务在处理数以万计的客户端连接时,往往出现效率低下甚至完全瘫痪,这被称为C10K问题设计不够良好的程序,其性能和连接数及机器性能的关系往往是非线性的。,参考:/,C10K,系统改进参考:/=异步APIlinux 2.6 增加 AIOwindows

5、提供 IOCPselect=poll/epoll/kqueue,C10K,高性能网络服务参考:/pl.atyp.us/content/tech/servers.html性能低下的四要害Data copyContext switchesMemory allocationLock contention,内容概要,1.协程概念2.C10K提出的问题与对策3.调度4.网络框架的设计原则5.简单实现6.FAQ,调度,哲学家就餐问题是用来演示并行计算和多线程同步时产生的问题,参考:/zh.wikipedia.org/zh-cn/哲学家就餐问题,调度,哲学家就餐问题的常见解法:服务生解法一个简单的解法是引入

6、一个餐厅服务生,哲学家必须经过他的允许才能拿起餐叉。因为服务生知道哪只餐叉正在使用,所以他能够作出判断避免死锁。,调度,把问题简化:哲学家现在只负责吃饭,不再思考。不思考的哲学家也就不是哲学家了。1)哲学家调度状况:所有哲学家不停的向服务生请求许可,许可获得后吃饭。服务生被频繁的请求,导致lock contention问题 2)服务生调度状况:那我们就把其当成不思考的普通人看待,还是服务生解法,服务生喂这些哲学家吃。但是一个服务生的情况下,只能同时喂一个哲学家吃饭,还有3个餐叉被闲置,如果是俩个服务生的话,就能很好的利用现有的资源,不停的给所有哲学家进餐。,调度,协程线程,使用协程来模拟只会吃

7、饭的哲学家使用线程来模拟服务员,具体分配几个服务员按照现有资源进行分配。,调度,参考:/cvs.schmorp.de/libcoro/coro.h,Libcoro定义的协程操作API举例:,typedef void(*coro_func)(void*);typedef struct coro_context coro_context;void coro_create(coro_context*ctx,/*an uninitialised coro_context*/coro_func coro,/*the coroutine code to be executed*/void*arg,/*a

8、single pointer passed to the coro*/void*sptr,/*start of stack area*/long ssize);/*size of stack area*/void coro_transfer(coro_context*prev,coro_context*next);void coro_destroy(coro_context*ctx);,内容概要,1.协程概念2.C10K提出的问题与对策3.调度4.网络框架的设计原则5.简单实现6.FAQ,网络开发框架的设计,目前流行的网络开发框架:ACELibevent&libevBoost asio开源软件

9、ApatchHttpdNginxMemcachedMongoDB,网络开发框架的设计,个人原则,没有最好的开发框架,只有更适合的不要去重新发明轮子组装适合自己的组件,搭建自己的开发框架使用简单,避免误用,简单实现,网络组件,文件系统,内存管理,协程管理,调度控制,协程通信,线程管理,简单实现,网络组件 文件系统组件 基于协程的网络开发框架一定是异步开发框架,所以需要对底层系统级调用 进行异步封装防止框架的误用 内存管理 提供高效快捷的内存分配器 协程管理 负责协程的创建、切换、销毁,以及协程资源管理 协程通信 解决协程间通信问题 线程管理 提供线程的创建、销毁以及资源管理 调度控制 负责协程的调度以及协程对象的管理,一个执行绪只有一个调度器。,FAQ,问答&感谢,谢谢大家!,

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1