2013-03-21 6 views
48

私は、スカラ・アクターとJavaスレッドのパフォーマンスを比較していました。Scala/Akkaの俳優と比較して、Javaスレッドはどのように重いですか?

私は、私のシステムでは最大2000スレッド(1度に生きている)だけを産み出すことができたのを見て驚きました。しかし、同じシステムで~50万人のスカラの俳優を育てることができました。

どちらのプログラムも、約81MBのJVMのヒープメモリを使用していました。

あなたは説明することができますどのようにJavaスレッドは、scala/akkaの俳優よりもはるかに重いですか? スカラーアクターをこのように軽量化した主な要因は何ですか?

私はスケーラビリティを最大にしたいのですが、JBossやTomcatのようなJavaベースの伝統的なWeb /アプリケーションサーバーの代わりに、俳優ベースのWebサーバーを使うべきでしょうか?

ありがとうございました。

+3

ウェブサーバーに関する質問は、必要なものによって異なります。 NettyのようなNIOに基づいて、高いスループットを実現するスケーラブルなソリューションがあり、アクターは使用しません。本格的なWebサーバーが必要ですか?高い交通サービス?既知のフレームワーク(ジー、スプリング、...)との高度な統合?一般的なアクター、Akka 2.1は、特にクラスタリングや再生をサポートしています! akkaをベースにしているのは、 "スケーラブル"な解決策でもありますが、すべてのシナリオでは何もありません。それは本当にあなたのニーズにかかっています。 –

答えて

37

Scalaのアクター(Akkaのバラエティを含む)はJavaスレッドを使用します。魔法はありません。同時に実行される数千スレッド以上のスレッドが、ほとんどのデスクトップマシンにとって問題です。

アクターモデルは、動作していなければスレッドを占有していないawake-on-demandアクターを許可します。いくつかの問題は、多くの睡眠中のエージェントが何らかの仕事を待っているときに効果的にモデル化でき、比較的早くそれをやり直して眠りに戻る。その場合、アクターは、Javaのスレッドを使用して作業を効率的に行う方法です。特にパフォーマンスが最優先されているAkkaのようなライブラリがある場合は、

Akka docsは基本を非常によく説明しています。

すべてのスケーラブルなWebサーバーは、このような問題を解決する必要があります。主にWebサーバーのための決定を下すべきではありません。主に、俳優がボンネットの下で使用されているかどうか、また使用するものにかかわらず常に俳優を自分で追加することができます。

+0

"一般的に多くの俳優が1つのスレッドを共有している"と言っているので、あなたが書いたものをドキュメントがサポートしているかどうかはわかりません。 – Suma

+2

@Suma - 私はあなたが私の2番目の段落を理解したとは思わない。 –

16

Akkaアクターはスレッドと同等ではありません。スレッドプール上で実行されるのはCallableのようなものです。

メッセージがアクタにディスパッチされると、そのアクタはメッセージを処理するためにスレッドプールに配置されます。終了すると、プールされたスレッドを使用して他のアクターを実行できます。

関連する問題