首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tasks vs ThreadPool

Tasks vs ThreadPool
EN

Stack Overflow用户
提问于 2011-11-10 05:10:20
回答 5查看 15.2K关注 0票数 9

我在C#中有一个应用程序,上面有一个要做的工作列表。我希望尽可能多地并行完成这项工作。但是,我需要能够控制并行任务的最大数量。

据我所知,这可以通过ThreadPool或Tasks来实现。我用哪一个有区别吗?我主要关心的是能够控制一次有多少个线程处于活动状态。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-11-10 05:16:01

请查看Task%s的ParallelOptions.MaxDegreeOfParallelism

我建议您使用任务,因为它们提供了比ThreadPool更高级别的抽象。

关于这个主题的很好的读物可以在here上找到。真的,这是一本必备的书,而且还是免费的:)

票数 20
EN

Stack Overflow用户

发布于 2011-11-10 05:25:10

在第三方物流中,您可以在ParallelEnumerableParallelOptions.MaxDegreeOfParallism上使用WithDegreeOfParallelism

如果您只使用自定义线程或任务,CountdownEvent可能是一个更好的选择。

ThreadPool中,当您使用SetMaxThreads时,它对AppDomain是全局的,因此您可能会不必要地限制不相关的代码。

您不能将工作线程数或I/O完成线程数设置为小于计算机中处理器数的数。

如果公共语言运行库由Internet信息服务(IIS)或SQL Server承载,则宿主可以限制或阻止对线程池大小的更改。

更改线程池中的最大线程数时要小心。虽然您的代码可能会受益,但这些更改可能会对您使用的代码库产生不利影响。

将线程池大小设置得太大可能会导致性能问题。如果同时执行的线程太多,任务切换开销将成为一个重要因素。

我同意另一个答案,即你应该在ThreadPool上使用第三方编程,因为它是多线程的更好的抽象,但在两者中都有可能实现你想要的。

票数 5
EN

Stack Overflow用户

发布于 2011-11-10 05:17:08

在这篇article on msdn中,他们解释了为什么推荐使用Tasks而不是ThreadPool来实现并行性。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8071709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档