如果我有一个二维数组(4*4)并且我想循环整个数组元素
哪个更快?:
- 使用 1 个线程并通过它在整个数组上循环。
- 使用 4 个线程并按每个线程循环整行。
作为多核概念(性能-内存)哪个更好!?
谢谢。
如果我有一个二维数组(4*4)并且我想循环整个数组元素
哪个更快?:
作为多核概念(性能-内存)哪个更好!?
谢谢。
在任何一种情况下,实际的循环都将花费几乎没有时间。决定因素是线程将如何处理数组中的每个元素 - 元素是具有琐碎操作的简单 POD 类型,还是具有复杂、冗长、CPU 密集型方法的对象?
如果对每个元素执行的操作不到 50ns,那么创建或通知多个线程执行这样的操作是弄巧成拙的,因为这是通知线程开始运行循环所需的时间,这是在四个线程只需要发出信号以开始运行循环的最佳条件。将结果提交到池需要更长的时间。实际上创建新线程来运行 20ns 任务是没有希望的。
哪个更快?使用 1 个线程并通过它循环整个数组,或者使用 4 个线程并通过每个线程循环整个行。
这在很大程度上取决于需要对数组中的每个元素执行什么操作。如果它是一个需要一段时间才能运行的处理器绑定操作,那么您可以通过在其自己的线程中处理每个元素(或通过设置固定线程线程池并将每个元素作为自己的任务提交)来获得一些性能改进。否则正如@kan 提到的,你可能不会得到任何改进。
我只想打印每个元素!
如果每个元素的处理主要是 IO 操作,那么您将受到 IO 而不是 CPU 的限制。在这种情况下,如果您在单独的线程中运行每个元素的打印操作,您的程序将不会运行得更快。
作为多核概念(性能-内存)哪个更好!?
性能将是相同的。单线程解决方案将使用更少的内存,因为只有一个线程将被使用,但多线程(至少只有 16 个线程)增加的内存相对较小。