一直以来,我们学习线程切换与调度,都是通过阅读操作系统书籍或 Linux 源码甚至反汇编 Window 内核代码。无论怎样,这些东西都很抽象,学习起来十分困难。
另外,随着现代化编程语言逐渐流行,C++20 的正式发布,都离不开用户态线程这些基础知识。再比如 Golang 的 Goroutine,腾讯公司的开源的 libco,百度的 BRPC 中的 bhtread,如果想深刻理解它们,都需要扎实的基本功。
本次 Chat 会带你循序渐近的掌握下面的知识点:
- 控制流切换原理
- 上下文切换
- 线程设计
- 调度函数的封装与代码模块化
- 线程的主动切换
- 时间片轮转调度
本文实验环境:
ubuntu 16.04 32 位操作系统(读者请务必提前安装好);
挑选一个你自己觉得好用的虚拟机软件,比如 VMWare;
请把你的虚拟机环境配置成单核 CPU。
学习时间:大于 5 小时
为什么使用 32 位系统?因为方便初学者学习,能更快速的掌握原理。
图1 用户态线程运行示例
需要注意的是,上面的代码,并没有使用操作系统为我们提供的 pthread 系列函数,thread_create 和 thread_join 函数都是自己纯手工实现的。唯一使用操作系统的函数就