在带有线程的数组上循环

时间:2013-06-25 20:06:20

标签: java arrays multithreading

如果我有一个二维数组(4 * 4),我想循环整个数组元素

哪个更快? :

  1. 使用1个线程并循环整个数组。
  2. 使用4个线程并按每个线程循环整行。
  3. 哪个更好作为多核概念(性能 - 内存)!?

    感谢。

2 个答案:

答案 0 :(得分:2)

在任何一种情况下,实际循环都将在下一个时间内完成。确定因素是线程将对数组中的每个元素进行的操作 - 具有简单操作的元素简单POD类型还是具有复杂,冗长,CPU密集型方法的对象?

如果对每个元素执行的操作所需的时间少于〜50ns,则创建或发出多个线程来执行此类操作会自失败,因为这是指示线程开始运行循环所需的时间,以及这是在最佳条件下,四个线程只需要发出信号以开始运行循环。将结果提交到池中需要更长时间。实际上,创建新线程以运行20ns任务将毫无希望。

答案 1 :(得分:1)

  

哪个更快?通过它使用1个线程并循环整个数组,或者使用4个线程并按每个线程循环整行。

这在很大程度上取决于需要对数组中的每个元素执行的操作。如果它是一个需要一段时间才能运行的处理器绑定操作,那么您可以通过处理其自己的线程中的每个元素(或通过设置固定的线程线程池并将每个元素作为自己的任务提交)来获得一些性能改进。否则,正如@kan所提到的,你可能不会得到任何改进。

  

我只想打印每个元素!

如果每个元素的处理主要是IO操作,那么您将受到IO而不是CPU的限制。在这种情况下,如果在单独的线程中运行每个元素的打印操作,则程序将不会运行得更快。

  

哪个更好作为多核概念(性能 - 内存)!?

表现将是一样的。单线程解决方案将使用更少的内存,因为只使用一个线程,但多线程(至少只有16个)的内存增加相对最小。