并发编程作用于数组中的每个元素

时间:2014-05-16 15:28:15

标签: concurrency parallel-processing

我有一个与并行编程有关的问题。如果我有一个程序作用于数组的每一个元素,为什么使用所有可用的处理器都没有好处呢?

我在考虑可能是因为设置和管理多个线程的开销很大,或者数组大小不能保证并发解决方案。谁能想到别的什么?

2 个答案:

答案 0 :(得分:1)

某些处理器可能已经忙于处理重要事情,或者您可能希望保留备用容量,以防它们需要快速响应新的工作负载。例如,在具有8个处理器的桌面系统中,您可能希望保留1个空闲状态以保持UI响应,同时分配7"批处理"其他人的线程。在非UI系统中,您可能仍希望保留一个或多个内核侦听OS中断或执行网络IO。

一个特别令人沮丧的例子是在所有内核上开始并行计算,发现你应该在启动它之前调整一个参数,并且不能中断计算,因为没有剩余的计算能力来允许UI回复你的“取消”#39;按钮。

答案 1 :(得分:0)

我会把那个数组作为一个静态变量,根据它的大小,我会划分任务并分配多个踏板来为数组中的每组元素进行工作。

例如,如果我在数组中有100个元素。我会把它分成几组。 我会用10种不同的线程来完成我的工作。

如果我没有找到你,请纠正我。

<强> EDITED: -
操作系统已经为您准确地做到了。它并不能保证每个线程永远保持在同一个核心上(并且几乎在所有情况下,也不需要它),但它确实尽可能地保持尽可能多的核心。这意味着尽可能为所有可用线程提供自己的核心 注意: - 不保证程序线程和OS线程之间的直接关联,至少根据.net:http://msdn.microsoft.com/en-us/library/74169f59.aspx

希望这有一定道理。