uthread
协程的概念在coroutine源码分析中有介绍。phxrpc默认使用ucontext作实现,同时还有boost优化版本。
UThreadContext
UThreadContext是定义了协程接口的基类,并且有一个静态函数对象,用来创建协程上下文,其应该是子类的DoCreate函数,
UThreaStackMemory
UThreaStackMemory是每个协程的私有栈,这里并没有实现共享栈模式,节省了拷贝,而且内存分配也没有使用malloc,而是使用的mmap,这里设置了一个标志变量need_protect_来选择是否开启保护模式,开启保护模式会在栈两端各多分配一页,并将这两页设置PROT_NONE属性禁止访问。调用mmap时同时设置了MAP_ANONYMOUS | MAP_PRIVATE,MAP_ANONYMOUS表示这段内存是匿名的,不需要读写fd。MAP_PRIVATE建立一个私有映射,不与其他进程共享。
UThreadContextSystem
UThreadContextSystem是默认的使用ucontext作实现的协程上下文。每个上下文维护一个context_表示协程的上下文,同时还有一个static __thread修饰的main_context_,表示每个线程只有一个,协程yield的时候会切换到

本文详细分析了PhxRPC中的UThreadContext及其相关组件,包括UThreaStackMemory、UThreadContextSystem、UThreadRuntime和UThreadEpollScheduler等。UThreadContext作为协程接口的基类,通过UThreaStackMemory实现每个协程的私有栈。UThreadContextSystem基于ucontext实现协程上下文,而UThreadRuntime负责协程调度。UThreadEpollScheduler则封装了epoll驱动的协程调度,实现异步操作。文章还探讨了协程的创建、切换和复用过程。
最低0.47元/天 解锁文章
1454

被折叠的 条评论
为什么被折叠?



