今下午在公司内部做了高端话题的分享,话题是异步io调度器是怎么实现的. 另外结合socket服务器又该如何调度处理? 这次的PPT写的有些简略,但基本说明了构建异步io框架的基本元素。
这次的分享由来是什么? 我前端时间一直再写一个调度器,类似于gevent那种,但中间遇到了不少的问题,比如信号事件化,定时器触发事件化。 真正的下手去实现的时候,会发现自己忽略了众多的细节,我花了将近一个月的事件去造一个调度器的轮子,虽然最后实现的很是不雅,但中间的学习过程,真心很受益 。 发现自己越来越迷失在高性能并发的场景应用了。 O(∩_∩)O~ 可恨的是没有场景让我具体去测试。
另外,我发现很多朋友张口异步,闭口非阻塞的,天天说tornado怎么牛逼,node.js回调是如何销魂,gevent是如何让人舒服。。。 但问题是很多人都将不明白异步非阻塞的本质到底是什么? 什么是阻塞,为什么会阻塞,怎么怎西是哪里阻塞,怎么避免阻塞. 当然我那些变态源码同事还是很强大的,他们对于tornado的源码算是吃透了。 但是,他们对于系统的io调度器实现,还是有点朦胧的感觉。所以,这次分享更加侧重于软实战的感觉。
内容点:
socket技术实现
长连接 vs 短连接
忙轮询 vs io多路复用
select vs epoll区别
边缘触发 vs 水平触发
上下文那点事
场景的高并发网络模型
协程跟连接池的关系
libevent、libev
怎么写io调度器
怎么写非阻塞客户端
回调函数的实现
定时器的实现
…
该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新. http://xiaorui.cc/?p=3377
我把PPT扔到slideshare了,如果看不到ppt内容的朋友,可以自行翻墙或者 下载pdf版本.
PDF地址:
http://xiaorui.cc/async_frame.pdf
源地址:
http://www.slideshare.net/rfyiamcool/async-io-frame
async io frame from rfyiamcool
异步io框架的实现 from rfyiamcool
END.
感觉到干货了