基本概念

#协程基本概念

  • 协程是运行于线程中的轻量级调度单位。
  • 协程之于线程,类似于线程之于进程。
  • 一个进程中可以存在多个线程,一个线程中可以存在多个协程。
  • 协程所在的线程一般被称为调度线程
  • 协程发生 io 阻塞或调用 sleep 等操作时,调度线程会挂起此协程。
  • 协程挂起时,调度线程会切换到其他等待中的协程运行。
  • 协程的切换是在用户态进行的,比线程间的切换更快。

协程非常适合写网络程序,可以实现同步的编程方式,不需要异步回调,大大减轻了程序员的思想负担。

#co 协程特性

coost 中实现的是一种类似 goroutine 的协程,有如下特性:

  • 支持多线程调度,默认线程数为系统 CPU 核数。
  • 共享栈,同一线程中的协程共用若干个栈(大小默认为 1MB),内存占用低,Linux 上的测试显示 1000 万协程只用了 2.8G 内存(仅供参考)。
  • 协程创建后,始终在同一个线程中运行,而不会切换到其他线程。
  • 各协程之间为平级关系,可以在任何地方(包括在协程中)创建新的协程。
coost 协程库中 context 相关代码取自 rukitbox,而 tbox 则参考了 boost 的实现,在此表示感谢!