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 用汇编写的。