7

何千もの同時接続を処理する能力よりも生データのスループットが重要ではない、低遅延サーバーを作成する必要があります。どの言語を使えばいいのかわからない。Javaはよりシンプルで、開発はより速く、私が必要とするすべてのもののための素晴らしいインターフェース+ネットワーキングのための優れたサポート(JAVA NIOとセレクタークラス)。しかし、実際にはプログラミング以外のJavaの経験はあまりないので、Javaは今日ネイティブC/C++より遅くないなどのことを読んだとしても、c/c++はバイナリコードにコンパイルされるため、パフォーマンスに疑問がありますただし、Java .class ファイルは解釈されるため、その変換にはオーバーヘッドが必要です。

  • 誰かが自分の経験を投稿できますか?
  • 誰かが低遅延アプリをプログラムしましたか?
  • そのタイプのアプリケーションに使用する方が良いとはどういう意味ですか?

編集: アプリは、Web アプリケーション (チャットなど) でリアルタイムをサポートするためのサーバーになります。

4

2 に答える 2

19

通常、人々は低遅延のアプリケーションを望んでいるので、低遅延とはどういう意味かわかりません。

だから私がJavaのようなものを読んだとしても、今日はネイティブC /C++より遅くはありません

それでも少し遅く、ほとんどの場合問題になるほどで​​はありません。

たとえば、ネットワークIOは、使用する言語に関係なくネットワークIOです。たとえば、この言語では、最も極端な低遅延の場合を除いて、ネットワークが速くなったり遅くなったりすることはありません。

、c / c ++はバイナリコードにコンパイルされますが、java.classファイルは解釈されるためです。

Javaは実行時にネイティブコードにコンパイルされるため、両方のシステムが最終的にネイティブコードを実行します。

したがって、その変換にはオーバーヘッドが必要です。

起動時にオーバーヘッドがあります。ただし、アプリケーションが実行されると、影響ははるかに少なくなります。

誰かの高遅延アプリをプログラムしましたか?

ネットワークの遅延が大きい場合、言語が問題になる可能性は低くなります。

そのタイプのアプリケーションに使用する方が良いとはどういう意味ですか?

最も使いやすい言語を使用することをお勧めします。

アプリは、Webアプリケーションでリアルタイムをサポートするためのサーバーになります

その場合、適切にコーディングしていれば、ネットワーク遅延はアプリケーションの遅延よりもはるかに高くなる可能性があります。


大まかな考え方として、一般的なインターネット接続の遅延は5〜20ミリ秒です。一般的なユーザーは、50ミリ秒の遅延でしか反応できません。待ち時間が20〜50ミリ秒のサーバーは、ほぼすべての言語で作成できます。遅延が200〜500マイクロ秒のサーバーは、JavaまたはC++で作成できます。クライアントへの遅延を含めて100マイクロ秒未満が必要な場合は、コアエンジン用の特殊なハードウェアといくつかのC++コードを検討しています。その場合、サーバーとコンシューマーは、同じラックではないにしても、おそらく同じ建物内にあります。

于 2012-08-29T09:21:45.120 に答える
1

ほとんどの JVM 実装は、ジャスト イン タイム (JIT)コンパイル手法を使用しているため、事前にコンパイルされたプログラム (C++ または Ocaml) とほぼ同じくらい効率的です。

以下では Linux の観点から説明します。

.classJVM は通常、バイトコード ファイルのホット スポットを (段階的に、そして 1 回) マシン コードに変換します。

Ocaml (Web パーツにOcsigenを使用) やOpaなどの他の言語の使用を検討することもできます。

もちろん、アプリケーションの非常に重要な部分を C (または C++) でいつでも書き直し、それを Java (または Ocaml、または他の言語) コードから呼び出すことができます。

実際の Web ジョブに合わせて、実行時にマシン コードを生成できます。asmjitまたはGNU lightningを調べてください。C コードを生成し (この草案レポートで説明され、 CHARIOTによって資金提供されているBismonのように実行時に)、それをプラグインとしてコンパイルし、dlopen(3)およびdlsym(3)することができます。この回答も参照してください。ランタイム C コード ジェネレーターのより単純な例は、私のmanydl.c (Linux 用) です。

libonionPOCOWtなどの HTTP サーバー ライブラリの使用を検討できます。

SBCLを使用して、Web アプリケーションをCommon Lispでコーディングすることを検討してください。https://common-lisp.net/から利用できる多くのライブラリがあります- Web 関連のライブラリを含みます。

GNU guileまたはPythonを使用してサーバーをコーディングできます。Web サービスを高速化するプラグインや拡張機能を簡単に見つけることができます。

もちろん、観察されるレイテンシはハードウェアによって異なります。安価なRaspberryPiとtop500.Orgにリストされているハイエンドのスーパーコンピューターでは同じではありません。

于 2012-08-29T09:23:12.063 に答える