腾讯开源的协程基础库:Libco
jopen
10年前
libco 是腾讯开源的一个有趣的协程基础库,仅有的几个函数接口 co_create/co_resume/co_yield 再配合 co_poll, 可以支持同步或者异步的写法,如线程库一样轻松,库里面提供了socket族函数的hook,
包含如下内容:
-
pthread风格的coroutine接口封装
-
事件循环以及超时机制
-
基于glibc-2.17源码修改的一个swapcontext高性能汇编版本
-
socket函数的coroutine hook,阻塞式的socket调用会直接切换为异步调用
适用场景:已有大量的同步调用网络库,例如HttpGet/Memcache_cli/..., 并基于这些函数实现了大量复杂的业务逻辑,它们跑在多进程或者多线程环境下,希望改造为异步服务
改造方法:在进程/线程内创建多个coroutine( 使用co_create ),每个routine内部enable_sys_hook, 业务逻辑代码移到routine里面执行,那你所有的同步代码立即自动切换为异步调用~