我知道新的TPL(任务并行库)已经实现了Parallel.ForEach(),因此它可以与“表达的并行性”一起工作。这意味着,它并不能保证你的委托将运行在多个线程中,而是检查主机平台是否有多个内核,如果是的话,它只能在整个内核中分配工作(每个内核基本上只有1个线程) 。.NET 4 ... Parallel.ForEach()问题
如果主机系统没有多个核心(越来越难找到这样的计算机),那么它会像“常规”foreach循环那样按顺序运行你的代码。坦率地说,非常酷的东西。
通常我会做类似下面放置从线程池在后台线程我长时间运行的操作:
ThreadPool.QueueUserWorkItem(新WaitCallback(targetMethod),新Object2PassIn());
在主计算机只有一个核心的情况下,TPL的Parallel.ForEach()会自动将调用放在后台线程上吗?或者,我是否应该从后台管理员那里调用任何TPL调用,以便如果我从一台核心计算机执行,至少该逻辑将不在GUI的调度线程中?
我担心的是,如果我让TPL负责这一切,我想确保它是否确定它是一个单核心框,它仍然将在Parallel.ForEach()循环内部的代码编组到后台线程中就像我会做的一样,以免阻塞我的GUI。
感谢您的任何想法或意见...
只需快速跟进:TPL Rocks!无法通过使用TPL呼叫与“标准”票价进行一些小的调整,就能够让我能够制作各种应用程序的速度快得多。我正在关注削减80%以上的各种物品的加工时间。 MS真的把它从这个公园里淘汰出去了 - 很棒的工作人员。 – BonanzaDriver 2011-01-06 01:52:56