一尘不染

goroutines如何工作?(或:goroutines与操作系统线程的关系)

go

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

文档中

Goroutines

之所以称它们为goroutine,是因为现有术语(线程,协程,进程等)传达了不准确的含义。goroutine有一个简单的模型:它是在相同地址空间中与其他goroutine同时执行的函数。它是轻量级的,仅比分配堆栈空间花费更多。而且堆栈从小开始,因此价格便宜,并且可以通过根据需要分配(和释放)堆存储来增长。

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


阅读 216

收藏
2020-07-02

共1个答案

一尘不染

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

参考:https :
//groups.google.com/forum/#!topic/golang- nuts/
2IdA34yR8gQ

2020-07-02