go 开多个goroutine,是在一个进程中完成,还是可能在多个进程中完成

go 开多个goroutine,是在一个进程中完成,还是可能在多个进程中完成

我是说 开100个goroutine,这100个goroutine 都是在一个系统进程中完成的,还是可能因为计算量大,而在多个系统进程中完成

阅读 12.1k
4 个回答

在一个进程中完成的。
但是有可能是在多线程中运行。
runtime.GOMAXPROCS(runtime.NumCPU())在Go中可以使用这一条语句来设置运行时最大有多少个cpu来goroutine的任务,实际上指定的就是运行时最大可以开启多少个线程(系统级)来执行goroutine。
更详细的内容可以看看这个: golang的goroutine是如何实现的?

当然是在1个进程中完成的。1个进程就能开N个了。多个进程自然能进N*n个了。

GO程序是单进程的(手动fork/exec不算),但是调度器是多线程的。

在 go 语言中, goroutine可以理解为一个线程(当然实际上并不是)。 一个进程可以创建任意多个线程(只要系统资源足够), 类似的, 一个go进程可以创建任意多个goroutine, 也就是说题主说的开 100个goroutine都是在一个系统进程中完成的. 当计算量大时, 如果系统资源有限,在运行的gorouine会小于100个,其他goroutine处在等待状态,直至调度器让他们运行,但不会创建一个新进程(实际上在系统资源紧张时,创建新进程对于计算量大的问题并无多少帮助)。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏