web-dev-qa-db-ja.com

異なるScalaアクター実装の概要

「正しい」アクターの実装を見つけようとしています。それらがたくさんあることに気づきました、そしてそれらを選ぶのは少し混乱しています。個人的には特にリモートアクターに興味がありますが、完全な概要は他の多くの人にも役立つと思います。これはかなり一般的な質問なので、あなたが知っている実装についてだけお気軽に答えてください。

私は次のScalaアクター実装(SAI)について知っています。不足しているものを追加してください。

  • Scala 2.7(との違い)
  • Scala 2.8
  • アッカ( http://www.akkasource.org/
  • リフト( http://liftweb.net/
  • Scalaz( http://code.google.com/p/scalaz/


  • これらのSAIのターゲットユースケースは何ですか(軽量対「重い」エンタープライズフレームワーク)?

  • 彼らはリモートアクターをサポートしていますか?リモートアクターにはSAIにどのような欠点がありますか?
  • 彼らのパフォーマンスはどうですか?
  • コミュニティはどれくらい活発ですか?
  • 彼らはどれくらい簡単に始めることができますか?ドキュメントはどれくらい良いですか?
  • それらを拡張するのはどれくらい簡単ですか?
  • それらはどれくらい安定していますか?どのプロジェクトがそれらを使用していますか?
  • 彼らの欠点は何ですか?
  • 彼らの設計原則は何ですか?
    • それらはスレッドベースまたはイベントベース(受信/反応)またはその両方ですか?
    • ネストされたreceiveS
    • アクターのメッセージループをホットスワップする
53
Stefan K.
18
mkhq

Scala 2.1 の時点で、scalaアクターは非推奨になり、Akkaアクターは標準配布の一部になりました

9
RAbraham

Scala2.7.7。 vs 2.8後 Scala 2.8.0 RC3ディストリビューション

新しいReactorは、オプションの暗黙的な送信者IDを備えた、より軽量で純粋なイベントベースのアクターを提供します。デーモンスタイルのセマンティクスを持つアクターのサポートが追加されました。アクターは、効率的なJSR166yフォーク/結合プールを使用するように構成できるため、1.6JVMのパフォーマンスが大幅に向上します。スケジューラーはプラグイン可能になり、カスタマイズが簡単になりました。

Hallerの設計ドキュメントもあります: Scalaアクター:スレッドベースとイベントベースのプログラミングの統合

8
Stefan K.

私の知る限り、リモートアクターをサポートしているのはScalaとAkkaだけです。

Akkaは、akkaの商用サポートとプラグインを提供するスケーラブルソリューションによってバックアップされています。 Akkaは、既存のフレームワーク(camel、AMQP、JTA、Comet、Spring、Redis)との統合、さらにSTMと永続性を対象としたヘビー級のソリューションのようです。

Scalaと比較したAkkaは、ネストされた受信をサポートしていませんが、アクターのメッセージループのホットスワップをサポートしており、スレッドベースとイベントベースの両方のアクター、いわゆる「イベントベースのシングルスレッド」アクターを持っています。

6
Stefan K.

Akkaが徹底的な試合を強制していることに気づきました。したがって、技術的に受信が部分関数を期待している場合でも、関数は部分関数であってはなりません。これは、すべてのメッセージをすぐに処理する必要があることを意味します。

3
Stefan K.