Green Threads 100L 代码实现
Green Thread 是在语言运行时调度,而非由操作系统调度的线程。这意味着,有如下优缺点:
- 优点
- 几乎不能更快的新建 gthread 速度,比起 thread, process
- gthread 切换开销特别小,可能就只有几个字节
- 内存花的更小
- 缺点
- 你只能写异步代码
- 差不多只能运行在单核上,即便你有多处理器(有办法突破)
- 你只能写异步代码, again. 调试代码挺麻烦
GThread 一般要求你显示提供 yield 方法做上下文切换,调用 gthread 方法也必须套在一个 context 下面
关于简介,查看 https://c9x.me/articles/gthreads/intro.html
从代码上看,这份实现比较简单,能算是比较好的概念实现,离实用有不少距离。核心数据结构:gt
, 管理状态(unused, running, ready) 和上下文(一堆寄存器的值)。核心方法:gtinit
初始化全局变量 gt 表, gtyield
找到可用的 gthread,然后做一次寄存器值的保存和恢复(gtswitch),gtgo
初始化一个 gt;特别的 gtswitch
用汇编写的。