二级目录 —— libco源码分析、学习笔记(腾讯协程开源库)

博客一级目录

libco源码分析/学习笔记

由于时间紧迫和我技术有限,一些前驱知识点我就不过多解释了。大概有基础的操作系统概念,一点汇编知识(64位汇编栈帧之类的东西),c/c++,linux网络编程。不用很精通(好吧博主我也比较菜),学习嘛。

        对于linux而言,进程拥有系统资源(包括内存、cpu、显示器等)、是系统资源分配的基本单位;但是进程的分配和销毁代价比较大,为了提高并发度且减小代价,人们发明了线程(轻量级的进程),它是系统调度的基本单位,不包含资源,一个进程有若干线程,它们共用进程的资源。但是线程的调度还是要经过操作系统,用户空间和内核空间的切换,以及线程间对临界资源的管理(使用锁的机制)也会消耗较多的系统资源,影响性能,我们不可能创建太多的线程。所以又发明了协程。

        协程是用户态调度(执行)的最小单位,它的创建,执行,上下文切换,挂起,销毁都是在用户态中完成,说白了就是用一个线程轮转不同的代码来模拟线程调度的过程以提高并发性。线程是由系统调度,执行顺序和操作的原子性对于用户(程序)来讲是不可预测的,而协程是用户自主管理协程调度的,协程的原子操作来说,我们只需要关心用户层面的操作原子性(即在这个线程里协程的执行顺序)。因为我们在用户层面实现了调度器,所以我们不需要进行内核空间和用户空间切换就可以自己实现锁机制。

        协程除了是用户自己创建调度销毁的以外,跟线程还是很相似的。

附上github开源代码链接---->>>腾讯https://github.com/Tencent/libco  fork版本https://github.com/WbtLm/libco

由于本人还没有完全看完所有代码,也是懵懵懂懂,所以下面的学习笔记、分析先不牵扯整体架构,只面向当前源代码,且主要分析x86_64部分(其他的差不多)。

 

索引

  1. libco配置、编译 初体验 - 腾讯协程开源库如何使用libco写程序并编译运行。
  2. coctx_swap.S、coctx.h、coctx.cpp上下文切换 
  3. co_routine(第一部分 : 辅助函数)cpp文件下辅助函数(如链表操作,取cpu频率操作)
  4. co_routine(第二部分 : 协程的创建)协程创建和初始化  小核心部分
  5. co_routine(第三部分 : 协程操作)零零散散的小函数不成敬意
  6. co_routine(第四部分 : 时间轮、事件循环、co_poll)核心部分
  7. routine函数和结构体整理总结 libco源码分析、学习笔记 最上层常用函数总结
  8. 基于libco、socket、epoll的回射服务器简单练习
  9. 一百行代码实现协程demo

 

知乎:腾讯开源的 libco 号称千万级协程支持,那个共享栈模式原理是什么?

一块share stack上的一个栈由多个协程共享,当一个协程要使用stack时,上一个协程要让出来(将栈内有效数据保存到自己的控制字内),然后新协程使用共享栈空间直到其他公用这块栈的协程把它抢占,否则它就一直占用这块栈空间(不管它是否在运行)。

 

发布了118 篇原创文章 · 获赞 63 · 访问量 3万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览