当我使用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线程限制?
答案 0 :(得分:3)
没有很多程序代码,无法提供明确的答案。我怀疑你能提供一个能够解决问题的简化例子。 10,000个线程是很多线程。
我猜是因为Go为每个goroutine的阻塞操作创建了一个新线程,你有很多goroutines在阻塞调用。
我不确定,但我认为每个goroutine都有自己的阻塞调用线程,并且它们不会被合并。因此,拥有超过10,000个goroutine,每个都会阻止调用可能是问题。
所有人都猜到了。
找到增加10,000线程限制的方法: https://golang.org/pkg/runtime/debug/#SetMaxThreads
debug.SetMaxThreads(20000)