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_
表示协程的上下文ÿ