Warm tip: This article is reproduced from serverfault.com, please click

concurrency-goroutines如何工作?

(concurrency - How do goroutines work? (or: goroutines and OS threads relation))

发布于 2014-07-06 19:40:40

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

文档中

Goroutines

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

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

Questioner
omribahumi
Viewed
0
OneOfOne 2014-07-07 03:57:58

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

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