2012-02-15 9 views
3

私は、Vod要求を処理する高性能rtspサーバを実装したいと考えています。これは、シグナリング要求を処理するだけで、メディアファイルをストリーミングする必要はありません。私はMinaのネットワークフレームワークに基づいてJavaで書かれたバージョンを完成させました。そのパフォーマンスはあまり高くないようです。高性能rtspサーバ

高性能SIPサーバ(VoIPサーバなど)はC言語で書かれています(例えばOpenSIPS、Kamailo)。私のプロジェクトではパフォーマンスを大幅に改善するためにCまたはC++を使用する必要がありますか?

BTW。 OpenSERがCの著者によって作成された理由の説明を見つけました: "一方で、JavaでSIPアプリケーションを開発するときには多くの問題を引き起こすガベージコレクタです。Javaのストップウォーキングで書かれたAheavily loaded serverガベージコレクタがメモリをクリーニングしています。ガベージコレクタによって引き起こされる遅延は10秒を超えることもありますが、そのような遅延は受け入れられません。 " これは現実にはCを使うべきであるということですか?

+0

理論上、Javaアプリケーションのパフォーマンスを「向上させる」とは、アセンブリ/ C/C++のような他のプログラミング言語を使用して最適化されたネイティブOSのダイナミックリンクライブラリのラッパーを作成することです。これは、JNIやJNAなどのJavaテクノロジを使用して行うことができます。いくつかのプロジェクトでは、VLCJ(libVLCエンジンへのJavaバインディング、VLCメディアプレーヤーで使用されるGCC +ライブラリとプラグインのコレクション) –

答えて

5

ここには膨大な数の変数がありますが、言語は決定要因ではない可能性があります。 MINAの作者であるTrustin Leeは、後でNettyを作りました。これは確かに非常に高いパフォーマンスを提供します。 Lee himself says MINAは、提供している機能の複雑さがコアに強く拘束されているため、「パフォーマンスが比較的悪い」ことを示しています。だからあなたはNettyを見て、すべてを完全に書き直すかもしれません。

あなたは、OracleのJVMを使用している場合は、コード内のホットスポットを特定する非常に最適化されたランタイムシステム(したがって、その名前「ホットスポット」)を使用して積極的に実行時にそれらを最適化しています。 JavaコードがCコードよりもゆっくりと実行されるということは、実際には言うことができるので長いことです。 よく書かれた、最適化された Cコードはおそらく特定の選択タスクで同等のJavaコードを外れているかもしれませんが、そこからの一般化はおそらくはもはや適切ではなく、もちろんJVMが負うべきいくつかの負担あなたはJavaを使っています。また、フットプリントと長いポーズの間に一貫性と短い休止を好むなど、tune the JVM's garbage collectorにできることがいくつかあることにも注意してください。

明らかに、Cにはいくつかの強みがあります(機械に近いことは時には正確にはです)。特定のタスクの明示的なメモリ管理も同様です。

3

Wowzaとrtspサーバーを比較しましたか? WOWZもJavaで書かれていますので、あなたのrtspサーバーのパフォーマンスがWowzaより低い場合は、言語を変更せずにパフォーマンスを向上させることができます.Wowzaのパフォーマンスがサーバーと似ている場合は、たぶんあなたはc/C++を使うべきだと思うかもしれません。

関連する問題