.net 任务并行库和多个并行任务
TPL如何处理多个并行调用 示例:我想并行处理两个不相关的集合。 (假设处理每个集合中的一个项目需要很长时间) 目前我是这样做的:.net 任务并行库和多个并行任务,.net,parallel-processing,task-parallel-library,.net,Parallel Processing,Task Parallel Library,TPL如何处理多个并行调用 示例:我想并行处理两个不相关的集合。 (假设处理每个集合中的一个项目需要很长时间) 目前我是这样做的: Parallel.Invoke(() => Parallel.ForEach(collection1,...), () => Parallel.ForEach(collection2,...)) 这是可行的,但我很好奇TPL调度器将如何处理3个单独的调用 我应该换一种方式吗?首先有两件重要的事情: 如果在Paralle
Parallel.Invoke(() => Parallel.ForEach(collection1,...),
() => Parallel.ForEach(collection2,...))
这是可行的,但我很好奇TPL调度器将如何处理3个单独的调用
我应该换一种方式吗?首先有两件重要的事情:
- 如果在Parallel.For/Parallel.ForEach工作负载(或任何类型的循环中阻塞委托)中有长时间运行的迭代,则应始终使用ParallelOptions.MaxDegreeOfParallelism指定并发级别。这是因为并行循环实现针对更细粒度的工作负载进行了优化,当遇到长时间运行的迭代时,它们可能会注入额外的工作线程
- 通过同时启动并行循环,您已经迫使这两个循环争夺CPU资源。因此,即使您没有长时间运行的迭代,也应该通过限制每个循环的MaxDOP(实际上我会使用Environment.ProcessorCount/2)来明确地实现负载平衡
- 收集工作是否需要大致相同的工作量李>
- 您是否有任何循环中的阻塞代理