项目
- 地址: https://github.com/kkHAIKE/sco
- 状态:概念已验证,持续改进
起因
公司一些老项目使用了 brpc,写全异步的时候被回调地狱折磨,一想到现在都快 c++23 了,何不用协程解决问题,而现有的开源协程框架都要求从底层用起(很难与 brpc 结合)
思路
看完c++20 协程文档(感觉每一句都挺重要。。),有了用引用计数方案管理协程的想法
简单的说,就是当一个协程被 co_await 挂起后,由最晚运行的回调线程负责恢复,这样就不用从底层开始管理协程生命周期了
限制
所有包装使用的 异步函数 必须满足
- 函数无返回(void),并且回调函数也是:即类似
void func(int a, std::function<void(int)) cb) - 函数正常运行,必定调用回调
- 函数不调用回调则必定抛出异常
样例
https://github.com/kkHAIKE/sco/blob/main/main.cpp
解释:
some(1, 2).start_root_in_this_thread();在一个线程中开始启动协程co_await sco::call_with_callback(&test, a, b, sco::cb<void(int,int)>(c, d));包装 异步函数 test
输出
test return some end 2,3 test return some return 3,4 后记
- 各位大佬点个 star 吧
- 这个思路有前景吗?如果有的话,我会投入一些时间到这个项目
