ホームページ  >  記事  >  バックエンド開発  >  Go のパフォーマンスは Java ほど良くない?

Go のパフォーマンスは Java ほど良くない?

Go语言进阶学习
Go语言进阶学习転載
2023-07-24 14:45:281275ブラウズ

今日、Zhihu で <span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">Go</span><span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">Java</span> のパフォーマンスの比較についての質問を見ました。通常、結末は 1 つだけであり、それについては終わりのない議論が続いています。今から 10 年後、これら 2 つの言語がまだ存続している場合、これは依然としてホットな問題になる可能性があります:

Go のパフォーマンスは Java ほど良くない?

アプリケーションのことは置いといて、シナリオのパフォーマンスを語るのは冗談です

現在、私は主に Java と Go を使用しており、方向性はビッグデータです。

  • #ほとんどの言語には得意分野があり、その存在は合理的です:

    • #PHP<span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;"></span> 低コストの WEB 構築が得意。これは世界最高の言語でもあります。

    • ##c

      <span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;"> オペレーティング システムと組み込みが得意</span>

    • Go

      <span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;"> 自然に高い同時実行属性</span>

    • ##R
    • の科学計算と統計は比類のないものです <span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;">#</span>

    • #Python<span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;"></span> は AI 分野のリーダーです

    • ## Java<span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;"></span> 産業グレードのアプリケーション サービスと Android (TIOBE リストを長い間独占してきた古いギャング)

  • ベンチマーク<span style="color: rgb(74, 74, 74);box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;"> テスト データは確かにいくつかの問題を説明できますが、このテスト環境と方法はまだ十分に根拠がありません。同様のケースに遭遇することはまれであり、今後も発生することはありません。数ミリ秒のギャップがあったため、言語を変更してプロジェクトをリファクタリングしました。 </span>

  • Hot Code この概念は非常に重要です。一部のコード スニペットは月に 1 回ヒットしますが、その後はヒットしません。どこまで極端な最適化が必要か。 <span style="color: rgb(74, 74, 74);font-size: 16px;box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;"></span>

  • 28 ルール、コードの重要な 20% にエネルギーの 80% を費やしてください。エネルギーには限りがありますが、オリジナルの記事を書いてみんなと共有するなど、世界にはまだ美しいことがたくさんあります(手動ウィンク)。 <span style="color: rgb(74, 74, 74);font-size: 16px;box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;"></span>

  • Talkischeap.Showme the code.

    私の経験に基づくと、ほとんどの人の現在のプログラミング レベルはそうではありません。私が言語自体のパフォーマンスについて話す番です。そうでない場合は、WeChat に私を追加して飛ばしてください。 <span style="color: rgb(74, 74, 74);font-size: 16px;box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;"></span>メリットとデメリットのまとめ

  • 友人から返信された内容は非常に客観的かつ典型的だと思いますが、Zhihu に捕まり削除されました。

JAVA の現在の問題はパフォーマンスではありません。JIT によって自動的に最適化されたコードはすでに C と同等であるためです。

JAVA の問題は、実際の実際のプロジェクトでは、サードパーティへの依存関係が多すぎること、アーキテクチャが肥大化していること、過剰な設計があることです。現時点では、どちらが勝つかを言うのは難しいです。

個人的には、Go は基本的に標準ライブラリしか必要としないため、実際のプロジェクトでのパフォーマンスは JAVA よりも優れていると思います (Go のコルーチンは本質的に非同期 IO モデルであり、Go 言語: すべてが非同期です)。また、リソース使用量もパフォーマンスの一部であり、明らかに go の方がメモリ使用量が少なく、CPU 消費量も比較的少ないです。

#Go on the Benchmark ゲームは、ほとんどのシナリオで Java よりも高速に実行され、メモリ消費量は Java の 1/3 です。

#リストに挙げてみましょうGo の欠点:

  1. #これは少し反プログラマ構文です

  2. ##ジェネリックがありません

  3. 標準ライブラリのデータ構造は Java よりもはるかに豊富ではありません

  4. 依存関係管理は役に立たない

  5. ##チャネルが不適切に使用されると、デッドロックが非常に発生しやすくなります

    # コンパイル中にループ インポートは許可されません
  6. 多くのパッケージ名はコーディング中にカスタム変数名と競合します
  7. Java には当然のことだと思っているライブラリがたくさんありますが、Go では車輪の再発明が必要であることがわかりました
  8. go get コマンドは、履歴コミットを含む git ウェアハウス全体のクローンを作成します
  9. 標準ライブラリはルーチン プールを提供しません
  10. 既成の Future メカニズムはありません。チャネルを通じて自分で実装する必要があります。
  11. これらは、とりあえず思い浮かびますが、もちろんこれらはすべて解決できます

Java の欠点:

##言語の欠如表現スキル (現実的な用語は「臭くて長い」です)

  1. #メモリと CPU の消費量が多い

  2. #ヒープ メモリが大きい場合、満足のいくリサイクル効果を得るにはガベージ コレクタを詳細に調整する必要がありますが、場合によっては、リアルタイム要件が高いシナリオでは、gc では解決策がない場合があります。フル gc がトリガーされると、地獄になります。

  3. プログラムをウォームアップする必要があります

  4. JDK は巨大で、springboot jar パッケージも巨大です (問題はマイクロサービス アーキテクチャで最も顕著です)

  5. ##Spring FamilyBucket はますます重くなり (Spring の場合、IoC AOP を実行するだけで十分です)、その結果、FamilyBucket を使用するアプリケーションのパフォーマンスが低下します (TechEmpower Round 14 の Spring の位置を参照してください)。しかし、依然として重くなっています。十分な

  6. 成熟したフレームワークやライブラリが多すぎるため、プログラミングを始めるときはAPIを調整したりフレームワークを使用したりするだけだと偏見を持っている人が多いですが、彼らは原則についてほとんど知りません

当面思い浮かぶのはこれらのことです。もちろん、Java の利点はこれらの欠点をはるかに上回りますが、そうでなければ Java は役に立ちません。 TIOBE プログラミング言語ランキングで年間を通じて 1 位にランクされる

以上がGo のパフォーマンスは Java ほど良くない?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はGo语言进阶学习で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。