进程线程协程

进程->线程->协程

在现实世界中,基本是是按着这样的顺序演化:process–>thread–>coroutine/fiber 其实是一个 context 切换开销从大到小的演化,process 切换开销最大,需要切换地址空间,所有的 CPU 状态,所有其他资源 thread 切换只需要切换 CPU 状态,当然是大部分的 CPU 状态,而 coroutine 切换,只需要切换很少的 CPU 状态,而且全部都在用户地址空间运行,不需要到内核空间。

  • thread之間需要context-switch,而且成本很高,但是coroutine之間的切換很快
  • coroutine的成本很低,可以很輕易的產生大量的coroutine
  • 這些事情全是在同一個thread裡發生的,因此不會有race condition等問題發生 (還是可能會有)
  • thread的context-switch雖然我們可以進行某種程度的控制,但是很多部份還是得靠OS來決定要先排程哪個thread,而coroutine的執行是由我們自己控制的

参考

本站采用「署名 4.0 国际」进行许可。