在foreach循环中使用parallel.foreach和task之间的性能差异是什么?

mting923

我想知道什么是最好的方法,或者有什么文档/文章可以帮助我确定在每个循环的普通循环中使用Parallel.foreach和Task有什么区别,如下所示:

情况1-Parallel.foreach:

Parallel.foreach
{
  // Do SOmething thread safe: parsing an xml and then save 
  // into a DB Server thry respoitory approach
}

情况2-foreach中的任务:

foreach
{
  Task t1 = Task.factory.startNew(()=>
  {
     //Do the same thing as case 1 that is thread safe
  }
}
Task.waitall()
  • 我做了自己的测试,结果表明案例1的性能要比案例2好。比率大约是这样的:顺序vs案例1 vs案例2 = 5s:1s:4s

虽然案例1和案例2几乎是1:4?那么这是否意味着如果我们想在循环中并行运行,我们应该始终使用parallel.foreach或parallel.for吗?

菲利普·斯科特·纪梵斯(Phillip Scott Givens)

首先,关于该主题的最佳文档是通过C#编写的CLR的第五部分。

http://www.amazon.com/CLR-via-C-Developer-Reference/dp/0735667454/ref=sr_1_1?ie=UTF8&qid=1376239791&sr=8-1&keywords=clr+via+c%23

其次,我希望Parallel.Foreach的性能更好,因为它不仅可以创建任务,而且可以对它们进行分组。在Jeffrey Richter的书中,他解释了将单独启动的任务放入线程池队列中。锁定实际的线程池队列有一些开销。为了解决这个问题,任务本身对创建的任务有自己的队列。Tasks拥有的这个Task子队列实际上可以做一些工作而无需锁定!

我将不得不再次阅读该章(第27章),所以我不确定Parallel.Foreach是否以这种方式工作,但这是我期望的。

他解释说,锁定是昂贵的,因为它需要访问内核级别的构造。

无论哪种情况,都不要指望它们按顺序进行处理。由于上述内部原因,使用Parallel.Foreach与foreach关键字相比,顺序处理的可能性较小。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在foreach循环中使用Parallel :: ForkManager

来自分类Dev

在foreach循环中使用for循环值

来自分类Dev

在并行foreach循环中使用source()

来自分类Dev

在while循环中使用foreach

来自分类Dev

在 forEach 循环中使用动态键

来自分类Dev

在foreach循环中使用sql查询的foreach循环

来自分类Dev

angular.foreach和native for循环之间的性能差异

来自分类Dev

angular.foreach和native for循环之间的性能差异

来自分类Dev

在foreach循环中使用PHP解析数组值

来自分类Dev

无法在Razor foreach循环中使用Viewbag列表项

来自分类Dev

在foreach循环中使用未初始化的值

来自分类Dev

在foreach循环中使用多个数据项

来自分类Dev

PHP在foreach循环中使用不同的网格大小

来自分类Dev

在foreach循环中使用异步查询返回文档

来自分类Dev

如何在嵌套的foreach循环中使用ProgressBar?

来自分类Dev

无法在Razor foreach循环中使用Viewbag列表项

来自分类Dev

在foreach循环中使用PHP更改外部Javascript的值

来自分类Dev

php:在foreach循环中使用不同的数组

来自分类Dev

PHP-在foreach循环中使用多个值

来自分类Dev

如何在foreach循环中使用爆破功能

来自分类Dev

如何在jQuery foreach循环中使用if条件

来自分类Dev

在foreach循环中使用多个数据项

来自分类Dev

在 Foreach 循环中使用 Invoke-SQL 查询

来自分类Dev

在 forEach JavaScript 循环中使用基础对象

来自分类Dev

在 Foreach 循环中使用 While 时 UI 未加载

来自分类Dev

如何在 foreach 循环中使用 array_replace?

来自分类Dev

正确使用foreach循环中的foreach循环

来自分类Dev

正确使用foreach循环中的foreach循环

来自分类Dev

使用Year()和使用dateAdd在SQL Server中计算Year之间的性能差异是什么?

Related 相关文章

热门标签

归档