【发布时间】:2015-07-09 18:36:24
【问题描述】:
我刚开始使用线程,很快我就遇到了一个非常常见的问题,即多少线程太多了?
在做了一些研究之后,我更加困惑了。
任务
我有 16 个内核和一个生成 1000 个对象的应用程序,尽管构造参数是一致的。根据 msdn 文档和 Maximum number of threads,创建 1000 个线程通常会产生巨大的开销,从而破坏多线程的性能优势。此外,我必须保持在 3.5 NET 32 位限制 (Maximum number of threads in a .NET app?) 内。
问题 1
有这样一个单方面的任务,是否可以在计算机上创建比内核更多的线程? .NET 在那里优化了一些东西吗?我应该使用的最大线程数是多少?
问题 2
有没有一个简单漂亮的解决方案,除了用有限的资源排队?类似于信号量的东西,我创建了所有 1000 个线程,但立即停用线程以便不分配默认线程堆栈?
【问题讨论】:
-
线程池是一个有用的概念。
-
你不应该创建那么多线程,创建与核心数量一样多的线程,并重用线程来完成多个任务。
-
您的问题缺少的是您认为线程的作用。为什么你认为创建 1000 个对象需要 1000 个线程?
-
第一个问题有很好的现有副本。第二个问题(实际上不应该在同一篇文章中提出......)此时非常广泛,不太可能得到具体答案 - 无论如何,请考虑将其作为单独的问题提交,并附上指向该问题的链接并澄清你到底是什么希望用多线程进行优化。
标签: c# multithreading