【发布时间】:2018-02-23 12:22:17
【问题描述】:
我不完全确定如何提出这个问题,但根据我使用 NodeJS 的经验,它有一个线程和一个进程队列来管理异步函数,你需要在单独的进程上运行你的 web 服务器的每个实例CPU 线程 - 然后在每个实例之间进行负载平衡。
您最终可以运行相同软件的 4 个实例,在 4 个单独的端口上提供服务,并通过负载平衡器在一个端口上公开。
通常,您会使用 PM2 之类的服务来为您管理此流程。
根据我的(基本)理解,goroutines 不是线程,所以我的自然思维想知道这是否意味着 Go 需要以相同的方式运行,多个进程跨越每个 CPU 线程。
是这样吗?或者,如果我使用 Gin 之类的东西编写 REST API,Go 会随着需求的增加自动跨 CPU 线程扩展吗?
【问题讨论】:
-
“根据我的(基本)理解,goroutines 不是线程”这是正确的,但您可以配置 go 使用多少线程来运行这些 goroutines。
-
Goroutines 被调度在真正的 OS 线程上。是的,标准库
http服务器会生成一个 goroutine 来处理每个连接,这将利用进程可用的所有 CPU。 -
@zerkms - 太好了!从 tkausl 所说,听起来设置最大可用线程是一个手动过程,是这种情况还是该过程会根据需要自动增长?
-
@DavidAlsh 如果您想利用所有 CPU,则无需设置任何内容。默认情况下,运行时设置为利用所有。