cari

Rumah  >  Soal Jawab  >  teks badan

java - 这段代码开了并行为什么变慢了?

开了并行需要17秒左右,把.parallel()去掉后只用5秒左右(i5双核)

public static void main(String[] args)
{
    long start = System.currentTimeMillis();
    long ret = new Random().longs(0, 10)
                        .limit(10000 * 10000)
                        .parallel()
                        .sum();
    long end = System.currentTimeMillis();
    System.out.println(ret);
    System.out.println("takes " + (end - start) + "ms");
    }
}

然后把代码中的stream改成用range而不用random生成随机数流,则是开并行要比不开并行快一倍(300ms:600ms):

public static void main(String[] args)
{
    long start = System.currentTimeMillis();
    long ret = IntStream.range(0, 1000000000)
                        .parallel()
                        .sum();
    long end = System.currentTimeMillis();
    System.out.println(ret);
    System.out.println("takes " + (end - start) + "ms");
    }
}

为什么前一个例子开并行会更慢,是random类的缘故吗?望指教!

高洛峰高洛峰2887 hari yang lalu589

membalas semua(1)saya akan balas

  • 怪我咯

    怪我咯2017-04-17 17:50:22

    Selepas menghidupkan selari, tatasusunan asal perlu dibahagikan kepada blok, pengumpulan dilakukan dalam setiap blok, dan kemudian digabungkan operasi tambahan ini mengambil masa. Pengumpulan itu sendiri adalah operasi linear yang sangat cekap. Oleh itu, jika data selari tidak cukup besar, atau parameter (seperti bilangan tugas, dsb.) ditetapkan secara tidak munasabah, ia tidak akan cekap seperti asal

    balas
    0
  • Batalbalas