我用Go写了一个小应用程序,启动了4个线程来完成各种任务 + 一个主线程。所以总共有5个线程。但是如果我启动活动监视器并监视进程,我看到的是这样的:
首先为什么会有7个线程?而且它不是恒定的。有时候是5,有时候是7。此外,所有由主线程启动的4个线程在完成他们应该做的事情后都会结束。我通过在线程顶部放置一个不同的语句来验证线程的结束。然而,在活动监视器中,线程计数保持为7。
有人知道这里发生了什么吗?这些额外的线程是由Go运行时启动的吗?有没有办法找出由我的代码而不是Go运行时启动的活动程序中有多少线程是活动的。
首先为什么会有7个线程?而且它不是恒定的。有时候是5,有时候是7。此外,所有由主线程启动的4个线程在完成他们应该做的事情后都会结束。我通过在线程顶部放置一个不同的语句来验证线程的结束。然而,在活动监视器中,线程计数保持为7。
有人知道这里发生了什么吗?这些额外的线程是由Go运行时启动的吗?有没有办法找出由我的代码而不是Go运行时启动的活动程序中有多少线程是活动的。
GOMAXPROCS
将操作系统线程分配给物理处理器,因此这仍然是一个好主意,否则所有的goroutine可能会在一个处理器核心上运行。 - OneOfOne