其他 goroutine 如何在调用系统调用时继续执行? (当使用 GOMAXPROCS = 1时)
据我所知,在调用系统调用时,线程放弃控制权,直到系统调用返回。
Go 如何在不创建每个阻塞的系统调用 goroutine 的系统线程的情况下实现这种并发性?
来自 文件:
Goroutines
它们之所以被称为 goroutines 是因为现有的术语ー线程, 协同程序、过程等等ーー传达不准确的内涵 Goroutine 有一个简单的模型: 它是一个并发执行的函数 在同一个地址空间中与其他 goroutine 连接。它是轻量级的, 成本只比堆栈空间的分配多一点点 从小处着手,因此成本较低,通过分配(和释放)实现增长 根据需要进行堆存储。
Goroutines 是多路复用到多个 OS 线程上的,所以如果需要的话 阻塞,例如在等待 I/O 时,其他的继续运行 设计隐藏了许多复杂的线程创建和 管理层。