2

次の 2 つのクラスのアプリケーションがあるとします。

(1) 集中的な数値計算と数値計算および数学計算

(2) 文字列がほとんどコレクション クラスに格納されている集中的な文字列正規表現の一致、xpath 検索、およびその他の文字列操作。

どちらの場合も、クライアントがこれらのアプリケーションに毎秒数千回、または並行してアクセスすることを想定しています。

したがって、サーバー バックエンドにアプリケーションを実装する選択肢がある場合は、Java 7 または Scala のいずれかを選択できます。より高速なパフォーマンスを実現し、より信頼性の高いコードを生成するには、どちらを選択する必要がありますか?

4

4 に答える 4

3

Google は最近、興味深いと思われるいくつかのベンチマークを行いました - ここにリンクされている論文を参照してください: http://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php

この論文は驚くほど非科学的ですが、何ができるかについては大まかな感触が得られます. 特に興味深いのはセクション VF かもしれません

Daniel Mahler は、より機能的なバージョンを作成することで Scala バージョンを改善しました。このバージョンは、Scala Pro ディレクトリに保持されます。このバージョンのコードはわずか 270 行で、C++ バージョンの約 25% であり、短いだけでなく、実行時間も約 3 倍改善されています。このバージョンはアルゴリズムの改善も行っているため、他の Pro バージョンと直接比較することはできないことに注意してください。

アルゴリズムが改善されたこのバージョンが速度のベンチマーク テーブルに含まれているかどうかはわかりませんが (そうは思いません)、より実装しやすいアルゴリズムの改善を採用することで、パフォーマンスを改善できる可能性があることを示しています。スカラで。ただし、単純な文字列処理にはあまり役に立ちません。

大きな要因は、これらの言語をプログラミングする能力と、それらを最適化する能力です。Java は明らかに冗長ですが、パフォーマンスの「落とし穴」に遭遇する可能性は低くなります。

于 2011-06-21T14:43:35.137 に答える
2

Java よりも数値計算のパフォーマンスが向上する可能性のある 2 つのポイント:

  • 実用的なもの: Scala を使用すると、「非常に並列な」問題の並列計算を非常に簡単に行うことができます。同じことを Java で行うこともできますが、より多くの時間と専門知識が必要になるため、まれな状況でのみ行われる可能性が高くなります。

  • 技術的なもの: Scala はプリミティブ型の汎用データ構造を特殊化できるため、ボックス化/ボックス化解除が不要になります。Java コンパイラはそれを行うことができません。

Scala は Java の String を使用するため、ここで可能な改善の量はかなり限られています。しかし、場合によっては String よりも優れたパフォーマンスを提供するロープのような他のデータ構造があります。

于 2011-06-21T18:37:28.533 に答える
1

あなたの専門知識と努力次第で、あちこちでより良い結果が得られると思います。通常、無限の開発時間とお金があれば、すべての言語でコードを改善、改善、改善できます。(ますます大きくなるキャッシュ、特殊なソーター、事前計算されたデフォルトなどを考えてみてください)。

両方の言語をよく理解し、あなたの分野のパフォーマンスに関する質問にある程度の経験があれば、大きな違いはないと思いますが、よりコレクションに適した scala アプローチによって時間を節約でき、通常の開発で節約できる時間は次のようになります。パフォーマンスの分析と改善に費やします。

于 2011-06-21T15:04:40.483 に答える
1

原則として、Scala が数値処理アプリケーションで Java よりも高速である理由はありません。

真面目で高性能な数値演算アプリケーションを書きたいと思ったら、Java や Scala、その他の JVM 言語は選びません。

私自身の経験から(そしてもちろん、これは単なる事例証拠であり、これがすべての場合に当てはまることを明確に証明するものではありません)、JVM は大量の計算処理に最適なプラットフォームではありません。生の数値処理速度が重要な場合は、C++ などの「金属」に近いものを使用した方がよいでしょう。これにより、Intel SSE 命令を使用したり、他の低レベルの最適化を実行したり、GPU を使用したりできます。アルゴリズムがそれに適している場合は、CUDAを使用します。

于 2011-06-22T07:17:01.890 に答える