GO:运行时:程序超过10000线程限制

时间:2015-08-17 02:22:38

标签: multithreading

当我使用go时,我收到错误'运行时:程序超过10000线程限制'

这是关于goroutine的信息。 '的 SCHED 229357ms:GOMAXPROCS = 16 idleprocs = 0线程= 8797 idlethreads = 8374运行队列= 2131 gcwaiting = 0 nmidlelocked = 141 nmspinning = 0 stopwait = 0 sysmonwait = 0

我们可以看到有8374个空闲线程,没有理由通过操作系统创建更多线程。

为什么程序超过10000线程限制?

1 个答案:

答案 0 :(得分:3)

没有很多程序代码,无法提供明确的答案。我怀疑你能提供一个能够解决问题的简化例子。 10,000个线程是很多线程。

我猜是因为Go为每个goroutine的阻塞操作创建了一个新线程,你有很多goroutines在阻塞调用。

我不确定,但我认为每个goroutine都有自己的阻塞调用线程,并且它们不会被合并。因此,拥有超过10,000个goroutine,每个都会阻止调用可能是问题。

所有人都猜到了。

编辑:

找到增加10,000线程限制的方法: https://golang.org/pkg/runtime/debug/#SetMaxThreads

debug.SetMaxThreads(20000)