chenyahui / chenyahui.github.io

My blog
http://www.cyhone.com
0 stars 2 forks source link

微信 libco 协程库源码分析 | 编程沉思录 #32

Open chenyahui opened 4 years ago

chenyahui commented 4 years ago

https://www.cyhone.com/articles/analysis-of-libco/

libco 是微信后台开发和使用的协程库,同时也是极少数的直接将 C/C++ 协程运用到如此大规模的生产环境中的案例。 在 《云风 coroutine 协程库源码分析》 中,介绍了有栈协程的实现原理。相比 coroutine,libco 在性能上号称可以调度千万级协程。 从使用上来说,不仅提供了一套类 pthread 的协程通信机制,同时可以零改造地将三方库的阻塞 IO 调用协程异步化。 本文将从

duweismile commented 3 years ago

你好博主,我有个问题不是很清楚,希望博主能给点指导,就是libco hook了所有的阻塞io,只注册fd对应的io事件后就yield让出cpu,那么当对应的fd发生事件时,也就是从epoll_wait返回时,协程调度程序如何将该fd对应的协程找出来,他们之间时通过什么对应的那?

chenyahui commented 3 years ago

@duweismile 你好博主,我有个问题不是很清楚,希望博主能给点指导,就是libco hook了所有的阻塞io,只注册fd对应的io事件后就yield让出cpu,那么当对应的fd发生事件时,也就是从epoll_wait返回时,协程调度程序如何将该fd对应的协程找出来,他们之间时通过什么对应的那?

可以注意看co_poll_inner函数,对于每个epoll事件,都会对应一个arg变量,存在epoll_event.data.ptr中. 该变量里面包含一个callback及当前协程的相关信息,当epoll_wait事件到达时,同时可拿到epoll_event.data.ptr,即可找到对应协程了