知识卡片
goroutine比线程更轻量
内容
在函数调用前加一个 go 关键字,这个调用就会在一个新的 goroutine 里并发运行,而不是阻塞当前 代码继续往下走——每个 Go 程序哪怕只写了一个 main 函数,本身也是运行在一个由运行时自动创建的 main goroutine 里的。发散:这种轻量性把”要不要为某个小任务开一条并发路径”的决策成本大幅 降低了——线程太重时,开发者会本能地想办法合并任务、复用线程池来省着用;goroutine 便宜到可以。
参考来源
- 位置:《Head First Go语言程序设计》第13章《分享工作:goroutine和channel》(源文件:_epub-src/index_split_003.html)
- 结论依据:原文在该章节围绕“在函数调用前加一个go关键字,这个调用就会在一个新的goroutine里并发运行,而不是阻塞当前代码继续往下走…”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。
- 原始内容:文,而不是字节! #5 有缓冲的channel Go有两种channel:有缓冲的和无缓冲的。 到目前为止,我们给你们展示的所有channel都是无缓冲的。当 goroutine在无缓冲的channel上发送值时,它会立即阻塞,直到另一个 goroutine接收到该值。另一方面,有缓冲的channel可以在导致发送的 goroutine阻…