控制在运行时在实例上执行的任务数

时间:2016-10-05 12:35:44

标签: c# multithreading task-parallel-library task threadpool

我最近一直在使用线程池进行一个(C#)项目,直到我的一个朋友向我简要介绍了TaskParallelLibrary(TPL)之后,它一直很顺利。

基本上我遇到了优化程序性能的问题。

问题是,我有一大堆要异步执行的任务。因此,我没有将1000个任务一起运行并拧紧整个机器,而是使用ThreadPool.QueueUserWorkItem将它们插入队列中,并将可以一次执行的最大线程数设置为4(具有四核处理器)。但现在,我想使用TPL,因为我知道它可以管理运行时在实例上运行的最大和最小线程。这可能对提高程序的性能很有帮助。但是,现在主要问题是如何动态告诉TPL通过分析处理器上的负载来找到可以执行的最大线程数,因为还有其他程序也在运行,而不是手动设置最大值可以执行的线程数?

这是我的第一个问题。如果你能帮帮我,我非常感谢! :)

被修改 - >

我的问题似乎被误解了,我将用一个例子解释它 - >
说,我正在写一些数据来分隔每个任务中的文件。任务总数为10,000。现在,这是一个无法在四核处理器上同时执行的大量任务。所以,我创建一个队列并在其中添加任务,TPL为我提供了某种调度程序,它具有在单个实例上执行n个任务的可变阈值。注意:此n是可变的,并根据处理器的性能(如在其上的负载)而变化。
所以回到我的问题,TPL中是否有任何方法可以自动控制'n',并且在完成一个任务之后继续从队列中取出一个任务,直到整个队列为空?

0 个答案:

没有答案