任务并行库混合多线程和单线程.net 4

时间:2014-07-29 05:43:48

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

我正在使用tpl以多线程方式处理数千个文件。很好。

但是,应用程序的某些部分我必须处理这些文件的单线程。

设置maxdegreeParallelism = 1表示1个线程x核心是否正确?

当你没有并行性并且你有4个核心时它仍然使用1个线程x核心吗?

问题是tpl为你做了很多艰苦的工作,而且对线程也不是很熟悉也无济于事。

底线我需要确保maxdegreeParallelism = 1是单线程的

很抱歉愚蠢的问题,但谷歌搜索无法找到答案。

2 个答案:

答案 0 :(得分:0)

Documentation没有说到CPU-Cores,而是并发操作。 所以这意味着,设置为1总共等于1个线程。虽然它与调用线程不同。

Fiddle to poorly prove assumption.

答案 1 :(得分:0)

请参阅here

没有。当你设置`MaxDegreePrallelism"时,并非每个核心运行一个线程的情况。它有不同的含义。它限制了在整个并行操作中完成的并行任务的数量。如果将其设置为1,则基本上会使您的并行方法无效。

TPL在线程池上安排任务。一旦任务被调度,线程池就决定如何在线程,内核和处理器之间分配所有要完成的任务。这是基于某些启发式方法,如虚拟地址空间,当前处于阻塞状态的线程数等。

现在,如果您的意思是应用程序的一部分应该以顺序形式完成任务,那么有很多方法可以实现。看看ContinueWith