gpt4 book ai didi

c# - 2000 个工作线程,只有几个真正的线程

转载 作者:太空宇宙 更新时间:2023-11-03 10:53:49 25 4
gpt4 key购买 nike

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

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

最佳答案

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

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

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

关于c# - 2000 个工作线程,只有几个真正的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20269031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com