Menggunakan pemproses berbilang teras untuk meningkatkan prestasi Java boleh dicapai dengan menggunakan perpustakaan berbilang benang, kunci dan konkurensi. Contoh praktikal termasuk penjumlahan selari menggunakan aliran selari dan rangka kerja Fork/Join. Ujian penanda aras menunjukkan bahawa pelaksanaan selari boleh mengurangkan masa jalan sebanyak satu perlapan berbanding dengan pelaksanaan bersiri. Tugas yang sesuai untuk pemproses berbilang teras termasuk: tugasan intensif pengiraan, tugas intensif I/O dan aplikasi dengan sejumlah besar operasi serentak.
Gunakan pemproses berbilang teras untuk meningkatkan prestasi Java
Dalam sistem komputer moden, pemproses berbilang teras telah menjadi standard. Pemproses berbilang teras membolehkan aplikasi melaksanakan pelbagai tugas secara selari, meningkatkan prestasi dengan ketara. Artikel ini menerangkan cara memanfaatkan pemproses berbilang teras di Java, termasuk contoh praktikal.
Java Parallel Programming
Java menyediakan pelbagai model pengaturcaraan selari, termasuk:
Contoh Praktikal: Jumlah Selari
Pertimbangkan masalah penjumlahan mudah: hitung jumlah semua elemen dalam tatasusunan yang diberikan. Berikut ialah pelaksanaan bersiri yang berulang ke atas elemen tatasusunan demi elemen:
public class SumArraySerial { public static int sumArray(int[] arr) { int sum = 0; for (int i : arr) { sum += i; } return sum; } }
Berikut ialah pelaksanaan selari menggunakan aliran selari dan rangka kerja Fork/Join:
import java.util.concurrent.ForkJoinPool; import java.util.stream.IntStream; public class SumArrayParallel { public static int sumArray(int[] arr) { return IntStream.of(arr).parallel().sum(); } public static int sumArrayForkJoin(int[] arr) { ForkJoinPool pool = ForkJoinPool.commonPool(); return pool.invoke(new SumArrayTask(arr, 0, arr.length)); } private static class SumArrayTask extends RecursiveTask<Integer> { private int[] arr; private int start; private int end; public SumArrayTask(int[] arr, int start, int end) { this.arr = arr; this.start = start; this.end = end; } @Override protected Integer compute() { int sum = 0; if ((end - start) <= 10000) { // 阈值,执行串行计算 for (int i = start; i < end; i++) { sum += arr[i]; } } else { // 超出阈值,分解任务和并行计算 int mid = (start + end) / 2; SumArrayTask left = new SumArrayTask(arr, start, mid); SumArrayTask right = new SumArrayTask(arr, mid, end); left.fork(); right.fork(); sum = left.join() + right.join(); } return sum; } } }
Ujian Prestasi
Kami menggunakan tatasusunan untuk menanda aras kedua-dua pelaksanaan. Pada mesin dengan 8 teras, pelaksanaan aliran selari berjalan dalam 76 milisaat, manakala pelaksanaan Fork/Join berjalan dalam 74 milisaat, lebih daripada 8 kali lebih pantas daripada pelaksanaan bersiri.
Bila menggunakan pemproses berbilang teras?
Gunakan pemproses berbilang teras untuk meningkatkan prestasi untuk:
Tips
Atas ialah kandungan terperinci Bagaimana untuk memanfaatkan pemproses berbilang teras untuk meningkatkan prestasi dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!