.net core perfview线程时间非活动含义

.net core perfview线程时间非活动含义,.net-core,threadpool,perfview,starvation,.net Core,Threadpool,Perfview,Starvation,我在linux上的dotnet aspnetcore(3.1)服务上遇到线程池饥饿问题的周期性高峰。值得注意的是,在Windows上,由于某些原因,这个问题完全不存在 我用dotnet跟踪捕获了跟踪,并得出结论,我确实捕获了感兴趣的区域,因为事件包含多个线程启动事件 现在,我正在努力理解是什么阻止了我的几十个线程,从而使threadpool创建了更多的线程 我已经阅读了多个文档和文章,仍然不能完全理解线程非活动和活动之间的区别。在threadtime视图中,我可以看到非活动节点下方有堆栈的节点。

我在linux上的dotnet aspnetcore(3.1)服务上遇到线程池饥饿问题的周期性高峰。值得注意的是,在Windows上,由于某些原因,这个问题完全不存在

我用dotnet跟踪捕获了跟踪,并得出结论,我确实捕获了感兴趣的区域,因为事件包含多个线程启动事件

现在,我正在努力理解是什么阻止了我的几十个线程,从而使threadpool创建了更多的线程

我已经阅读了多个文档和文章,仍然不能完全理解线程非活动和活动之间的区别。在threadtime视图中,我可以看到非活动节点下方有堆栈的节点。下面的例子。具体而言,此节点位于非活动节点的下方。如何解释呢?若非活动意味着线程不做任何事情的时间,那个么为什么在给定的时间区域内,我会在所有的时间桶中看到许多样本?这是否意味着此线程实际上已被阻止在此堆栈中


此外,我还查看了有关Task.Wait()或Task.Result主题的代码,但未发现任何内容。当然,我可能遗漏了一些,但我在perfview中看到的堆栈实际上都连接到适当的异步等待方法。