Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 任务并行库混合了多线程和单线程.net 4_Multithreading_C# 4.0_Task Parallel Library - Fatal编程技术网

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

Multithreading 任务并行库混合了多线程和单线程.net 4,multithreading,c#-4.0,task-parallel-library,Multithreading,C# 4.0,Task Parallel Library,我正在使用tpl以多线程方式处理数千个文件。一切都很好 然而,应用程序的某些部分我必须单线程处理这些文件 设置maxdegreeParallelism=1意味着1个线程x核心是否正确 当你没有你的并行性,你有4个核心,它仍然使用1线程x核心 问题是,tpl为您做了很多艰苦的工作,而且不太熟悉线程也没有帮助 底线我需要确保maxdegreeParallelism=1是单线程的 很抱歉这个愚蠢的问题,但通过谷歌搜索无法找到一个直接的答案。除了并发操作之外,没有提到CPU核心。 这意味着,设置为1等于

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

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

设置maxdegreeParallelism=1意味着1个线程x核心是否正确

当你没有你的并行性,你有4个核心,它仍然使用1线程x核心

问题是,tpl为您做了很多艰苦的工作,而且不太熟悉线程也没有帮助

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

很抱歉这个愚蠢的问题,但通过谷歌搜索无法找到一个直接的答案。

除了并发操作之外,没有提到CPU核心。 这意味着,设置为1等于总共1个线程。虽然这是一个不同的线程比CallingRead

不可以。设置“maxDegreeParallelism”时,每个核心不一定运行一个线程。它有不同的含义。它限制了在整个并行操作中完成的并行任务的数量。如果将其设置为1,基本上会使并行方法无效

TPL在线程池上调度任务。任务调度完成后,线程池将决定如何在线程、内核和处理器之间分配要完成的所有任务。这是基于某些试探法,如虚拟地址空间、当前处于阻塞状态的线程数等


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

您可以通过澄清您正在使用的类型,以及您正在将maxdegreeParallelism=1设置为on来改进您的问题。您好,我已经完全放弃了回复。谢谢你的时间。让我来纠正一下。设置MaxDegreeParallelism=1,它实际上会运行单线程,正如你所说的,它会使TPL变得无用。在某种程度上,这实现了我想在短期内做的事情,直到我读到更多关于ContinueWith的内容。你是说使用ContinueWith我可以并行执行一些部分和顺序执行一些部分吗?有任何例子吗?你对问题的定义可能过于笼统,无法给出正确的回答,但是是的。使用“ContinueWith”,您可以对一组任务进行排队,然后在完成所有以前的并行任务后,让程序继续执行另一个任务。请看一个例子。您好,谢谢您的回复。您说的是1将运行一个线程,无论您有多少CPU,但不是在主线程上,而是在后台线程上。这就是您所说的吗?是的,尽管它与CallingRead不同。