【发布时间】:2017-06-07 15:02:10
【问题描述】:
当使用Parallel.Foreach() 使用 4 个线程处理 100 个项目时,它将列表分成 4 个项目块(0-24,25-49,50-74,75-99),这意味着项目 0, 25、50、75并行处理。
是否有可能以某种方式对项目进行分区以首先处理具有较低索引的项目?喜欢:
Thread 1: 0, 5, 9,..
Thread 2: 1, 6, 10,...
Thread 3: 2, 7, 11,...
Thread 4: 3, 8, 12,...
【问题讨论】:
-
为什么需要这样做?
-
自己将列表分块并将每个块发送到并行 foreach?
-
不要这样做:每个 CPU 内核都有自己的缓存,带有 16 字节 缓存线;所以缓存开始感觉(锁定,检查锁定,重新加载等)彼此。通常的规则是尽可能地为不同的线程(任务)放置数据
-
是什么让您认为它首先执行 0、25、50 和 75?
标签: c# parallel.foreach