48

scala アクターと Java スレッドのパフォーマンスを比較したところです。

私はその違いに驚きました。私のシステムでは、最大 2000 スレッド (一度にライブ) しかスポーンできませんでしたが、同じシステムでは、500,000 のスカラ アクターをスポーンすることができました。

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

どのように Java スレッドが scala / akka アクターよりもこれほど重いのか説明できますか? scala-actor をこれほど軽量にした主な要因は何ですか?

最高のスケーラビリティを達成したい場合、JBoss や Tomcat のような Java ベースの従来の Web/アプリケーション サーバーではなく、アクター ベースの Web サーバーを使用する必要がありますか?

ありがとう。

4

2 に答える 2

39

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

アクター モデルでは、実行する作業がない限り、スレッドを占有しないアウェイク オン デマンドのアクターを使用できます。いくつかの問題は、多くの睡眠中のエージェントが何らかの仕事を得るのを待っているように効果的にモデル化することができます。その場合、アクターは Java スレッドを使用して作業を完了するための非常に効率的な方法です。パフォーマンスが優先される Akka のようなライブラリがある場合は特にそうです。

Akka docsは、基本をかなりよく説明しています。

適度にスケーラブルなすべての Web サーバーは、この種の問題を何らかの方法で解決する必要があります。おそらく、主にアクターが内部で使用されているかどうかに基づいて Web サーバーの決定を行うべきではありません。使用するものに関係なく、いつでも自分でアクターを追加できます。

于 2013-03-21T17:27:16.707 に答える
20

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

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

于 2013-03-21T17:26:54.223 に答える