在批评libco的上下文切换代码时,我认为协程只需恢复非易失性寄存器,而用户协程调度无需恢复易失性寄存器。为验证这一点,我编写了zcontext,发现其与boost.context的fcontext实现相似,均只恢复非易失性寄存器,从而显示出更快的上下文切换性能。
libco是腾讯开源的协程库,但存在设计缺陷,如干扰程序结构、强依赖调度器、使用过时的M:N模型及不支持标准C++用法。此外,上下文切换处理不当导致性能问题,整体上更像是“玩票”性质的库,受到不实崇拜。
libco 的定时器实现采用单级时间轮,支持高效的超时事件管理,操作时间复杂度为 O(1),可处理最多 60 秒的超时事件。经过优化,libco 现已支持无限超时时间,允许灵活管理超时事件。时间轮使用环形数组结构,确保高效存取。
定时器是网络框架中非常重要的组成部分,往往可以利用定时器做一些超时事件的判断或者定时清理任务等。 定时器有许多经典高效的实现。例如,libevent 采用了最小堆实现定时器,redis 则结合自己场景直接使用了简单粗暴的双向链表。 时间轮也是一种非常经典的定时器实现方法。Linux 2.6 内核之前就采用了多级时间轮作为其低精度定时器的实现。而在微信的协程库 libco...
libco是微信开发的高效协程库,支持千万级协程调度。它通过hook技术实现阻塞IO的自动切换,优化上下文切换性能,并支持协程嵌套创建。libco的栈空间管理灵活,默认128k,不使用ucontext,从而提升性能。尽管开源维护不活跃,但其设计理念和功能在异步编程中具有重要价值。
libco 是微信后台开发和使用的协程库,同时也是极少数的直接将 C/C++ 协程运用到如此大规模的生产环境中的案例。 在 《云风 coroutine 协程库源码分析》 中,介绍了有栈协程的实现原理。相比云风的 coroutine,libco 在性能上号称可以调度千万级协程。 从使用上来说,libco 不仅提供了一套类 pthread 的协程通信机制,同时可以零改造地将三方库的阻塞 IO...
前言 之前写了 《协程框架(libcopp)v2优化、自适应栈池和同类库的Benchmark对比》 和 《C++20 Coroutine》 ,但是一直没写 C++20 Coroutine 的测试报告。 现在的草案版本比我当时写 《C++20 Coroutine》 的时候有了一点点更新,cppreference...
云风的协程库是一个轻量级的C语言实现,基于ucontext和共享栈模型,支持有栈协程。协程相比线程更轻量,能有效处理异步流程,提升后端开发效率。库的核心在于上下文切换,通过保存和恢复协程的上下文实现切换与管理。尽管代码简约,但在实际开发中可能不够完善,微信的libco库提供了更强大的工业级支持。
完成下面两步后,将自动完成登录并继续当前操作。