[解決済み] JMSの代わりにScalaのActorを使うには、どのような設計上の決定が必要ですか?
質問
JMSの代わりにScalaのActorを使うと、どのような違いがありますか?
例えばパフォーマンスやスケーラビリティの観点から、ScalaのActorモデルはJMSと比較して何が追加されるのでしょうか?どのような場合にJMSではなくActorを使うのがより理にかなっているのか、つまりJMSがカバーできない問題をActorが解決してくれるのか。
どのように解決するのですか?
JMSとScalaのアクターは理論的な類似性を共有していますが、必ずしもアーキテクチャ的に同じ問題を解決しているとは考えないでください。アクターは、レースやデッドロックが一般に偶然に発生しにくい共有メモリ並行処理の軽量な代替品となることを意図しています。 JMS は、ダイレクト メッセージング、パブリッシュ/サブスクライブ、トランザクション、EJB 統合などにまたがることを意図した、洗練された API です。
アクターに最も近いJMSの等価物は、非永続的、非トランザクション的、非パブ/サブキューによってバックアップされるメッセージ駆動型Beanでしょう。 私はそれを単純な JMS Bean と呼ぶことにします。
では、質問にお答えします。
JMSは実装というより仕様なので、パフォーマンスについて話すのは難しいです。 しかし、シンプルな JMS Bean を使用する場合、パフォーマンスはほぼ同じで、時間とメモリでアクターに少し有利であると予想されます。 pub/sub、トランザクションなどの機能をJMSに追加すると、パフォーマンスは当然さらに低下しますが、その場合、リンゴとオレンジを比較しようとしているようなものです。
スケーラビリティに関しては、シンプルな JMS Bean はアクターとほとんど同じようにスケールするはずです。 JMS ミックスにトランザクションを追加すると、トランザクションのスコープに依存する量によって、スケーラビリティが当然損なわれます。
JMSにできないことで、アクターには何ができるのかという、より大きな疑問があります。 組み込みのパブサブやトランザクションがなければ、アクターは JMS から減点されるように見えます。 しかし、アクターは非常に少ないコードしか必要としないので、非常に細かい並行処理に喜んで使用することができます。 普通のJavaコードでは,「JMSとその依存関係や,それが必要とするコードなどをいじくり回すのは気が進まないので,スレッドを生成し,ロックを使い,データ構造を共有することにします」と言うかもしれません.
デザインにおける哲学的な違いもあります。 アクターには、スーパーバイザー階層というシンプルなコンセプトが組み込まれています。 アクターは通常、quot; let it crash" のデザインで使用されます。 あるアクターが何らかの理由で死んだら、別のアクターがそのアクターを再起動させるか、アクターの束を殺して全部を再起動させるか、あるいはアクターの束を殺してそれ自体を他のアクターに任せて問題に対処するか、といった対処を決定する責任を負っています。 そのようなことはJMSに追加できますが、APIの中核ではないので、何らかの方法で外部で管理する必要があります。
ところで、JMSがカバーする領域にもっと踏み込んだScalaのアクターライブラリについては、以下を参照してください。 Akka . Akka はまた、多くの一般的なアクター階層化戦略に対して宣言的なアプローチを提供します。
関連
-
Eclipse問題 アクセス制限。タイプ 'SunJCE' が API でないことを解決し、/jdk ディレクトリにある /jre と jre の違いについて理解を深める。
-
java マイクロソフト払い戻し予期せぬサーバーからのファイルの終了
-
SocketException java.netの4つの例外解決策。
-
ジャバアレイ
-
eclipse 実行 Java、エラー: 選択を起動できず、レシーバーもありません。
-
Javaがエラーで実行される、選択が起動できない、最近起動したものがない
-
[解決済み] Scalaのcase classとclassの違いは何ですか?
-
[解決済み】Scalaの記号演算子にはどんな意味があるの?
-
[解決済み】Scalaのyieldとは何ですか?
-
[解決済み] Scalaのアクター:受信と反応
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
undefined[sonar] sonar:デフォルトのスキャンルール
-
Collections.sortがdoubleでソートできない問題を完璧に解決する。
-
Springの設定でxsdファイルのバージョン番号を設定しない方が良い理由
-
Java の switch case 文で必要な定数式の問題の解決法
-
ApplicationContextの起動エラーです。条件レポートを表示するには、アプリケーションを'de'で再実行します。
-
が 'X-Frame-Options' を 'sameorigin' に設定したため、フレーム内に存在する。
-
-bash: java: コマンドが見つからない 解決方法
-
セミコロン期待値エラー解決
-
アノテーション「@Retention」の役割
-
Junitのユニットテストエラー