IM 架构设计05

从0到1的快速裂变:详解快的打车架构设计及技术实践

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

微信异步化改造实践:8亿月活、单机千万连接背后的后台解决方案

协程接口层实现了协程的基本源语。co_create、co_resume等简单接口负责协程创建于恢复。co_cond_signal类接口可以在协程间创建一个协程信号量,可用于协程间的同步通信。

系统函数Hook层负责主要负责系统中同步API到异步执行的转换。对于常用的同步网络接口,Hook层会把本次网络请求注册为异步事件,然后等待事件驱动层的唤醒执行。

事件驱动层实现了一个简单高效的异步网路框架,里面包含了异步网络框架所需要的事件与超时回调。对于来源于同步系统函数Hook层的请求,事件注册与回调实质上是协程的让出与恢复执行。


再具体一点讲讲共享栈的原理:libco默认模式(stackfull) 满足大部分的业务场景,每个协程独占128k栈空间,只需1G内存就可以支持万级协程。 而共享栈是libco新增的一个特性,可以支持单机千万协程,应对海量连接特殊场景。实现原理上,共享栈模式在传统的stackfull和stackless两种模式之间做了个微创新,用户可以自定义分配若干个共享栈内存,协程创建时指定使用哪一个共享栈。

不同协程之间的切换、 如何主动退出一个正在执行的协程?我们把共享同一块栈内存的多个协程称为协程组,协程组内不同协程之间切换需要把栈内存拷贝到协程的私有空间,而协程组内同一个协程的让出与恢复执行则不需要拷贝栈内存,可以认为共享栈的栈内存是“写时拷贝”的。

共享栈下的协程切换与退出,与普通协程模式的API一致,co_yield与co_resume,libco底层会实现共享栈的模式下的按需拷贝栈内存。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

一套海量在线用户的移动端IM架构设计实践分享(含详细图文)

http://www.52im.net/forum.php?mod=viewthread&tid=812&ctid=7

猜你喜欢

转载自blog.csdn.net/kuaipao19950507/article/details/107735040
IM