libco
GreyBtfly王宝彤
业精于勤,荒于嬉;行成于思,毁于随
展开
-
一百行代码实现协程demo
博客传送门:libco源码分析、学习笔记(腾讯协程开源库) x86_64部分协程基本原理就是上下文和栈的切换,本篇将libco中核心代码抽离出来实现一个迷你的协程实现演示。一、Linux下效果展示在deepin (64位 Linux)和mac os上测试成功了。贴一下效果图:deepin(64位)效果图:macOs(64位)效果图:红色部分为并发部分。二、...原创 2019-10-21 10:56:56 · 716 阅读 · 0 评论 -
基于libco、socket、epoll的回射服务器简单练习(加入一个内存池)
约定:端口8001发送socket时先发送一段6字节的消息,表示接下来要发送多少字节的正文,服务器回应同理(这个机制看上去漏洞百出,好吧,蒟蒻先这么用着)client随便写一下就好了server(new.cpp):为了练习libco、epoll、socket,大概采用这么一个结构:主协程负责初始化和eventloop,有众多worker协程(个数由宏定义CoNumber限定...原创 2018-11-27 20:56:53 · 1173 阅读 · 0 评论 -
routine函数和结构体整理总结 libco源码分析、学习笔记
博客一级目录二级目录——libco源码分析/学习笔记由于routine代码分成了好几篇博客分析,然后现在在宏观上对函数和结构上进行小小的总结和整理。一、常用的函数接口以下函数是最上层的函数(供平时编程调用的函数)int co_create( stCoRoutine_t **ppco,const stCoRoutineAttr_t *attr,pfn_co_routine_t ...原创 2018-11-06 20:57:45 · 1829 阅读 · 0 评论 -
co_routine(第四部分:时间轮、事件循环、co_poll)—— libco源码分析、学习笔记
博客一级目录二级目录——libco源码分析/学习笔记由于本源代码蛮长的,所以按照功能划分模块来分析,分为若干部分,详见二级目录↑代码文件:co_routine.h,co_routine.cpp,co_routine_inner.h看了eventloop的代码后不禁感叹:妙啊!!!一、时间轮libco管理定时事件便是使用时间轮这种数据结构定时器前驱知识本篇只稍微提一下,具...原创 2018-11-06 20:51:43 · 1950 阅读 · 0 评论 -
libco配置、编译 初体验 - 腾讯协程开源库
在某度上搜索libco全都是源码分析,像我这样的菜鸡使用Makefile时还是有点小挫折的,下面我们一起体验一下书写编译第一个ibco程序。博客一级目录二级目录——libco源码分析/学习笔记下载源代码github:https://github.com/WbtLm/libco打开上述网址,点击如下图所示的绿色按钮,选择Download Zip:将zip解压,(我将里面所...原创 2018-11-03 17:05:53 · 3242 阅读 · 7 评论 -
co_routine(第二部分 : 协程的创建)—— libco源码分析、学习笔记
博客一级目录二级目录——libco源码分析/学习笔记参考大牛GitHub注释由于本源代码蛮长的,所以按照功能划分模块来分析,分为若干部分,详见二级目录↑代码文件:co_routine.h,co_routine.cpp,co_routine_inner.h参考博客二、协程(task)的创建每当启动(resume)一个协程时,就将它的协程控制块stCoRoutine_...原创 2018-10-31 12:24:54 · 737 阅读 · 0 评论 -
co_routine(第三部分:协程各种操作)—— libco源码分析、学习笔记
博客一级目录二级目录——libco源码分析/学习笔记由于本源代码蛮长的,所以按照功能划分模块来分析,分为若干部分,详见二级目录↑代码文件:co_routine.h,co_routine.cpp,co_routine_inner.h三、协程各种操作void co_yield_env( stCoRoutineEnv_t *env );//将当前执行协程从协程栈中出栈并将执行权交给栈...原创 2018-10-31 20:57:27 · 1115 阅读 · 0 评论 -
co_routine(第一部分 : 辅助函数)—— libco源码分析、学习笔记
博客一级目录二级目录——libco源码分析/学习笔记由于本源代码蛮长的,所以按照功能划分模块来分析,分为若干部分,详见二级目录↑代码文件:co_routine.h,co_routine.cpp,co_routine_inner.h二、辅助函数 static unsigned long long counter(void);//主要是调用rdtscp这条汇编指令,将计数(来...原创 2018-10-31 18:06:26 · 807 阅读 · 0 评论 -
coctx_swap.S、coctx.h、coctx.cpp上下文切换(汇编)—— libco源码分析、学习笔记
博客一级目录二级目录——libco源码分析/学习笔记参考大牛博客:传送门coctx_swap.S大概功能分析文件:coctx_swap.S、coctx.h、coctx.cpp协程的调度和线程是很类似的。也需要保存和恢复上下文,这就要牵扯到各种寄存器了,而牵扯到寄存器,就不得不使用汇编指令。coctx_swap.S文件内实现的功能是协程之间上下文保存和切换。贴一遍代码:...原创 2018-10-29 15:52:39 · 1687 阅读 · 1 评论 -
二级目录 —— libco源码分析、学习笔记(腾讯协程开源库)
博客一级目录libco源码分析/学习笔记由于时间紧迫和我技术有限,一些前驱知识点我就不过多解释了。大概有基础的操作系统概念,一点汇编知识(64位汇编栈帧之类的东西),c/c++,linux网络编程。不用很精通(好吧博主我也比较菜),学习嘛。 对于linux而言,进程拥有系统资源(包括内存、cpu、显示器等)、是系统资源分配的基本单位;但是进程的分配和销毁代价比较大,为了提...原创 2018-10-29 15:53:02 · 1564 阅读 · 0 评论