2000工人线程,只有少数真实

问题描述 投票:2回答:1

我暂停了VS并进入了线程窗口。我看到> 2000“工作线程”条目具有相同的调用堆栈和不同的Id(线程使用Task.Factory.StartNew方法创建)。

所有这些线程都在等待一个锁被解锁。这可能是我的应用程序中的错误。问题是,当我来到任务管理器时,我看到了 - 标准数量的线程和内存使用情况。这是一个CLR优化,没有很多空闲线程,或VS线程窗口错误?

c# .net multithreading visual-studio
1个回答
2
投票

这是您代码中的错误。死锁是普遍的线程错误之一。

可以获得2000个线程。 ThreadPool管理器的工作是限制可以运行的线程数。由其SetMaxThreads()方法管理。在我的4核笔记本电脑上,默认值是一个非常大的数字,1023。也取决于.NET版本,你可能有一个8核心机器。实际上开始这么多开始需要一段时间。

死锁是更容易解决的线程错误,你有很多时间来查看调用堆栈以找出死锁的位置。与线程竞争错误不同,当您删除任何锁定时,您可能会遇到真正令人讨厌的错误导致僵局。暂时调用ThreadPool.SetMaxThreads(4,10000)来限制大屠杀是一个不错的策略,不要淹没线程的数量,使调试尝试看起来徒劳无功。

© www.soinside.com 2019 - 2024. All rights reserved.