マルチコア プロセッサを使用して Java のパフォーマンスを向上させるには、マルチスレッド、ロック、同時実行ライブラリを使用します。実際の例には、並列ストリームとフォーク/結合フレームワークを使用した並列合計が含まれます。ベンチマーク テストでは、並列実装はシリアル実装と比較して実行時間を 8 分の 1 まで短縮できることが示されています。マルチコア プロセッサに適したタスクには、計算集約型のタスク、I/O 集約型のタスク、および多数の同時操作を行うアプリケーションが含まれます。
マルチコアプロセッサを使用して Java パフォーマンスを向上させる
現代のコンピュータシステムでは、マルチコアプロセッサが標準になっています。マルチコア プロセッサにより、アプリケーションは複数のタスクを並行して実行できるようになり、パフォーマンスが大幅に向上します。この記事では、Java でマルチコア プロセッサを活用する方法を実際の例を含めて説明します。
Java 並列プログラミング
Java は、以下を含むさまざまな並列プログラミング モデルを提供します。
実践例: 並列合計
単純な合計の問題を考えてみましょう: 指定された配列内のすべての要素の合計を計算します。これは配列を要素ごとに反復するシリアル実装です:
public class SumArraySerial { public static int sumArray(int[] arr) { int sum = 0; for (int i : arr) { sum += i; } return sum; } }
これは並列ストリームと 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; } } }
パフォーマンス テスト
両方の実装のベンチマークに配列を使用します。 8 コアのマシンでは、並列ストリーム実装は 76 ミリ秒で実行されましたが、フォーク/結合実装は 74 ミリ秒で実行され、シリアル実装より 8 倍以上高速でした。
マルチコアプロセッサを使用するのはどのような場合ですか?
マルチコアプロセッサを使用して以下のパフォーマンスを向上させます:
ヒント
以上がマルチコアプロセッサを活用して Java のパフォーマンスを向上させるにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。