一尘不染

goroutine 是如何工作的?(或:goroutines 和 OS 线程的关系)

go

其他 goroutine 如何在调用系统调用时继续执行?(当使用 GOMAXPROCS=1 时)
据我所知,在调用系统调用时,线程放弃控制,直到系统调用返回。Go 如何在不为每个系统调用阻塞 goroutine 创建系统线程的情况下实现这种并发性?

文档

协程

它们被称为 goroutines 是因为现有的术语——线程、协程、进程等——传达了不准确的内涵。goroutine 有一个简单的模型:它是一个与同一地址空间中的其他 goroutine 并发执行的函数。它是轻量级的,成本比分配堆栈空间多一点。并且堆栈开始时很小,因此它们很便宜,并且可以通过根据需要分配(和释放)堆存储来增长。

Goroutines 被多路复用到多个 OS 线程上,所以如果一个应该阻塞,例如在等待 I/O 时,其他人继续运行。他们的设计隐藏了线程创建和管理的许多复杂性。


阅读 145

收藏
2021-12-26

共1个答案

一尘不染

如果一个 goroutine 正在阻塞,运行时将启动一个新的 OS 线程来处理其他 goroutine,直到阻塞的一个停止阻塞。

2021-12-26