控制parallel.foreach任务的执行顺序

TurgidWizard

我有一个表名列表(学生,考试,学校)。

我使用Parallel.ForEach循环来遍历表名,并使用来处理每个表MaxDegreeOfParallelism = 8

我的问题是我Parallel.ForEach并不总是从事偷工作的工作。例如,当两个表要处理时,它们可以一个接一个地处理而不是并行处理。我正在尝试提高性能并增加吞吐量。

我试图通过创建一个自定义来实现这一点TaskScheduler,但是,对于我的实现,我需要一个排序的任务列表,其中最简单的任务首先被排序,以便它们不会被运行时间更长的表所阻止。我似乎无法通过对传递给Parallel.ForEachList< string >的列表进行排序来执行此操作,因为任务按TaskScheduler无序入队。因此,我需要一种基于https://psycodedeveloper.wordpress.com/2013/06/28/a-custom-taskscheduler-in-c/在CustomTaskScheduler中对任务列表进行排序的方法

如何控制,其中将任务通过了秩序Parallel.ForEachTaskScheduler要排队?

西奥多·祖利亚斯

Parallel.ForEach方法根据源的类型采用两种不同的分区策略。如果源是数组或List,则将对其进行静态分区(预先)。如果来源是诚实¹ IEnumerable,则对它进行动态分区(在旅途中)。动态分区具有所需的工作窃取行为,但具有更多开销。在您的情况下,开销并不重要,因为工作负载的粒度非常低。

为了确保分区是动态的,最简单的方法是使用以下Partitioner.Create方法包装您的源

string[] tableNames;
Parallel.ForEach(Partitioner.Create(tableNames), tableName =>
{
    // Process table
});

¹(该表达式是从源代码中的注释中借用的

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Parallel.For中控制执行

来自分类Dev

如何控制不相关的Alteryx IO任务的执行顺序?

来自分类Dev

手动控制执行任务的顺序

来自分类Dev

Parallel.Foreach-空任务

来自分类Dev

如何在Android Studio的build.gradle中控制任务执行顺序?

来自分类Dev

如何指定在Parallel.ForEach中执行的并行任务数?

来自分类Dev

如何动态限制由 Parallel.Foreach 创建的任务的并发执行

来自分类Dev

在 C# 中执行 Parallel.Foreach 时布尔包含任务取消异常

来自分类Dev

R-doRedis-覆盖getTask以控制并行foreach循环的执行顺序

来自分类Dev

在angularjs中控制执行顺序

来自分类Dev

任务执行顺序

来自分类Dev

并行任务执行顺序

来自分类Dev

$ q-函数执行的控制顺序

来自分类Dev

$ q-函数执行的控制顺序

来自分类Dev

Gulp文件任务执行顺序

来自分类Dev

Celery中的顺序任务执行

来自分类Dev

顺序执行的纯计算任务

来自分类Dev

Luigi任务方法的执行顺序

来自分类Dev

使用Parallel.ForEach启动两个并行任务

来自分类Dev

在Rails控制器中执行简短的后台任务

来自分类Dev

Rails 在控制器中异步执行任务

来自分类Dev

Parallel.ForEach没有执行该方法

来自分类Dev

Parallel.ForEach没有执行该方法

来自分类Dev

如何控制量角器中代码的执行顺序

来自分类Dev

AngularJS控制器继承和执行顺序

来自分类Dev

如何控制Flyway可重复脚本的执行顺序

来自分类Dev

关于gradle中的任务执行顺序

来自分类Dev

执行顺序阻止任务的并行组

来自分类Dev

Android是否按顺序执行任务?