0

我正在用类似这样的任务(伪代码)填充任务工厂:

private int _taskcounter;

剪断

var factory = new TaskFactory();
for(var i = 0;i<1000;i++)
   factory.StartNew(() => doWork());

剪断

private void doWork(){
   Interlocked.Increment(ref _taskcounter);
   //do some slow I/O work here
   Interlocked.Decrement(ref _taskcounter);
}

如果您现在观看 _taskcounter,您
最初可以看到它开始大约 10 个任务,但随后它开始 1 到 2 个任务/秒,直到队列完成。

明显的行为,不是吗?

我的问题是:
有没有办法强制任务工厂在开始时启动更多任务?

我已经通过一些 msdn 示例类的变体来限制正在运行的任务的最大值,以防止过多的内存消耗。
还是这种有趣的测量方法或我的考虑有问题?

它没有必要在不同的线程中运行所有工作,否则我不会使用工厂
我只想从工厂的非工作窃取行为中受益。

对于其他一切,我都依赖工厂的智能。

4

1 回答 1

1

据我所知,TaskFactory 使用 ThreadPool,因此您可以尝试SetMaxThreads方法。但实际上它旨在优化资源消耗。所以我认为你不会得到太多的效率提升。

您也可以尝试手动启动线程new Thread(),这应该可以帮助您立即启动许多线程,但是我认为您不会获得太多的效率提升。

于 2013-12-09T10:54:05.653 回答