Rumah > Soal Jawab > teks badan
开了并行需要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类的缘故吗?望指教!
怪我咯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