【发布时间】:2015-01-05 22:47:34
【问题描述】:
我读过的教程和文档都说 goroutine 是“不完全线程”或“轻量级线程”,但通常可以将它们视为它们自己的单独线程。
那么...它们到底是什么?
【问题讨论】:
-
阅读实现?
-
在哪里可以找到内置关键字的实现?
-
我没有看过,但当然是在 Go 的源代码中 - 我主要是说要明确回答这个问题的唯一方法是查看源代码并进行研究。
-
您可以将它们称为“用户模式线程”,由用户模式调度程序多路复用到操作系统线程。也就是说:当一个 goroutine 开始等待阻塞操作(例如,对远程服务器的 HTTP 调用)时,Go 运行时会寻找其他可以运行的东西,并切换到它(即使它最后一次运行,它运行在不同的操作系统线程上)。