icz*_*cza 10

没有直接关联.您的应用使用的主题可能小于,等于或大于10.

runtime

GOMAXPROCS变量限制了可以同时执行用户级Go代码的操作系统线程数.代表Go代码在系统调用中可以阻塞的线程数没有限制; 那些不计入GOMAXPROCS限制.该软件包的GOMAXPROCS函数查询并更改限制.

因此,如果您的应用程序没有启动任何新的goroutine,则线程数将小于10.

如果您的应用程序启动了许多goroutine(> 10),其中没有任何阻塞(例如在系统调用中),10个操作系统线程将同时执行您的goroutines.

如果您的应用程序启动了许多goroutine,其中许多(> 10)在系统调用中被阻止,则将生成超过10个OS线程(但最多只有10个将执行用户级Go代码).

编辑(响应您的编辑):

GOMAXPROCSGOMAXPROCS=1
  • `如果您的应用程序启动了许多 goroutine,其中许多(>10)在系统调用中被阻塞,则会产生超过 10 个 OS 线程(但最多只有 10 个将执行用户级 Go 代码)。`这是否意味着如果我的代码正在执行大量 IO(比如 1000 次),我可能有 1000 次线程?在这种情况下,我的代码是否会遇到诸如 outOfMemory 之类的问题,即无法像其他语言那样产生更多线程? (2认同)
  • @AbhishekArya 是的,但是执行数千个并发 IO 操作是一个糟糕的设计。使用工作池高效地执行并发操作。 (2认同)