0

Google Nexus 7 でマルチスレッド Java プログラム (MapReduce スタイル) を実行しようとしましたが、実行時間を次のように測定しました。

System.currentMillis();

以下のように、パフォーマンスが大きく異なることがわかりました (4 コアの Tegra 3 で 4 スレッドを使用)。

704 872 729 729 1086 778 1214 1045 749 768

しかし、シーケンシャル バージョンを使用すると、次のような安定したデータが得られました。

928 851 850 842 863 917 873 905 853 870

ガベージコレクターは並行しているのでコアもかかると思っていましたが、それが大きなばらつきの原因ですか?

パフォーマンスがシーケンシャル バージョンよりもさらに悪い場合があるのはなぜですか?

4

1 に答える 1

0

ガベージコレクターもマルチスレッドだと思いましたが、それが大きなばらつきの原因なのですか?

IMO、GCが変動の原因である可能性は低いです。

シーケンシャルバージョンよりもパフォーマンスが大幅に低下することがあるのはなぜですか?

コードまたはSSCEを確認する必要があります。しかし、私の推測では、その理由は次のとおりです。

  • これは、Javaスレッドのパフォーマンス特性(スレッド作成のコストが高いなど)に適していない問題です。
  • マルチスレッドソリューションには、重大な同時実行のボトルネックや負荷分散があります。
于 2012-12-08T00:13:09.217 に答える