微信 libco 协程库源码分析

2019-10-08 18:02:04 +08:00
 cyhone

libco 是微信后台开发和使用的协程库,同时应该也是极少数的将 C/C++协程直接运用到如此大规模的生成环境中的案例了。

性能上来说,号称可以调度千万级协程。 从使用上来说,不仅提供了一套类 pthread 的协程通信机制,同时可以零改造地将三方库的阻塞 IO 调用协程异步化。

在另外一篇文章《云风 coroutine 协程库源码分析》中,我介绍了有栈协程的实现原理。

而相比于 coroutine 协程库, libco 整体更成熟,性能更高,使用上也更加方面。主要体现在以下几个方面:

  1. 协程上下文切换性能更好
  2. 协程在 IO 阻塞时可自动切换,包括 gethostname、mysqlclient 等。
  3. 协程可以嵌套创建,即一个协程内部可以再创建一个协程。
  4. 提供了超时管理,以及一套类 pthread 的接口,用于协程间通信。

本文将根据这几方面深入分析下 libco 的实现源码。

在正式阅读本文之前,如果对有栈协程的实现原理不是特别了解的话,建议可以提前阅读另外一篇文章《云风 coroutine 协程库源码分析》

同时,我也提供了libco 注释版,辅助大家理解 libco 的代码。

点击查看原文

4590 次点击
所在节点    C
5 条回复
cyhone
2019-10-08 19:06:02 +08:00
原文链接: [微信 libco 协程库源码分析]( http://www.cyhone.com/articles/analysis-of-libco/)

同时欢迎关注公众号:编程沉思录
eastlhu
2019-10-08 21:32:08 +08:00
感谢大佬,先 m 再看
VDimos
2019-10-08 22:18:40 +08:00
学习了
dzmcs
2019-10-09 12:36:50 +08:00
感谢,mark,学习一下
paoqi2048
2019-12-04 17:44:37 +08:00
学习了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/607150

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX