Scalaの複数Actorの実装はどう違うのか?
質問
Scala 2.9.0 のリリースに伴い、Scala 言語と Akka フレームワークを組み合わせた Typesafe Stack も発表されました。さて、Scala は標準ライブラリにアクターを備えていますが、Akka は独自の実装を使用しています。また、他の実装を探せば、LiftやScalazにも実装があることがわかりますよ。
では、これらの実装の違いは何なのでしょうか?
どのように解決するのか?
この回答は私のものではありません。 制作したものです。 Viktor Klang (Akka で有名) が、David Pollak (Lift で有名), Jason Zaugg (Scalaz で有名), Philipp Haller (Scala Actors で有名) の助けを借りて制作したものです。
私がここでやっているのは、書式を整えることだけです(Stack Overflow がテーブルをサポートしていれば、もっと簡単なのですが)。
後で時間があるときに埋めようと思うところがいくつかあります。
デザイン哲学
-
スカラ座の役者たち
最小の複雑さ。最大限の汎用性、モジュール性、拡張性。
-
リフト・アクター
最小限の複雑さ、明示的なライフサイクルを気にするよりもJVMによるガベージコレクション、他のScala & Javaプログラムと一貫したエラー処理動作、軽量/小さなメモリフットプリント、メールボックス、ScalaアクターやErlangアクターに静的類似、高いパフォーマンス。
-
Scalaアクター
Scalaで完全なErlangアクターモデルを提供し、軽量でメモリフットプリントを小さくします。
-
Akkaアクター
シンプルで透過的に配布可能、高性能、軽量、高適応性。
バージョン管理
Scalazアクター Liftアクター Scalaアクター Akkaアクター 現在の安定版 5 2.1 2.9.0 0.10 最小限のScalaのver. 2.8 2.7.7 2.8 最小限のJava ver. 1.5 1.5 1.6
アクターモデル対応
Scalazアクター Liftアクター Scalaアクター Akkaアクター 新しいアクタを生成する Yes Yes Yes アクター内部 メッセージの送信先 はい はい はい 既知のアクター 動作の変更 アクターは はい はい:ネストされた はい。 次のメッセージのために 反応/受信が不変に なる/ならない 監督 提供されない アクター はい はい (link/trapExit) Reactor: No
状態の分離のレベル
ユーザーがパブリックメソッドを定義した場合 を定義した場合、外部から呼び出せるか? 呼び出せるか?
- Scalazのアクター: n/a. アクターは封印された特質です。
- リフトアクタ。あり
- Scala のアクター。あり
- Akka のアクター。いいえ、アクターインスタンスはActorRefの後ろに遮蔽されています。
アクタータイプ
-
スカラ座のアクター
Actor[A] extends A => ()
-
リフトアクターズ
LiftActor
,SpecializeLiftActor[T]
-
Scalaのアクターです。
Reactor[T]
,Actor extends Reactor[Any]
-
アッカのアクターです。
Actor[Any]
アクターライフサイクル管理
Scalazアクター Liftアクター Scalaアクター Akkaアクター 手動開始 いいえ いいえ はい はい 手動停止 No No Yes 失敗時の再起動 n/a はい はい アクターインスタンスごとに設定可能 Restart semantics n/a Rerun actor アクタを再割り当てして安定した状態に戻し、古いインスタンスを捨てる。 動作は古いインスタンスを捨てる リスタート設定可能回数 n/a n/a X 回、Y 時間以内に X 回 ライフサイクルフック提供 ライフサイクルアクションなし preStart, postStop, preRestart, postRestart
メッセージ送信モード
Scalazアクター Liftアクター Scalaアクター Akkaアクター Fire-forget a ! message actor ! msg actor ! msg actorRef ! a(メッセージ) Send-receive-reply (see 1) actor !!! msg actor !!! msg actorRef !!! msg actor ! Send-receive-future (see 2) actor !!! msg actorRef !!! msg 送信-結果-オブ-プロミス(メッセージ) future.onComplete( f => to ! f.result ) 未来へ(actor) アクターをアクターコンプリートで構成する f No No No 関数 (3 参照)
(1) どんな関数fもそのような役者になる。
val a: Msg => Promise[Rep] = f.promise
val reply: Rep = a(msg).get
(2) 任意の関数fがそのような役者になる。
val a = f.promise
val replyFuture = a(message)
(3)逆変換ファンクタ。
actor comap f
. でのクライスリー合成も
Promise
.
メッセージ返信モード
未定
Scalazアクター Liftアクター Scalaアクター Akkaアクター 返信先メッセージ 返信先メッセージ
メッセージの処理
ネストされた受信をサポートしますか?
- Scalazのアクターです。--
- リフト アクター。はい(少し手でコーディングして)。
- Scala のアクター。はい、スレッドベースの受信とイベントベースの反応の両方。
- Akka アクター。いいえ、レシーブのネストは、メモリリークと時間の経過とともに低下するパフォーマンスにつながる可能性があります。
メッセージ実行の仕組み
未定
Scalazアクター Liftアクター Scalaアクター Akkaアクター 実行機構の名称 実行機構は 設定可能 実行メカニズムが設定可能 アクター単位で指定可能 実行機構のライフサイクル 明示的に管理する必要がある スレッド単位での実行 メカニズム イベントドリブン型実行機構 メールボックス型 一時的なメールボックスをサポート 永続的なメールボックスをサポート
配信/リモートアクター
Scalazアクター Liftアクター Scalaアクター Akkaアクター トランスペアレントリモート n/a No Yes Yes アクター トランスポートプロトコル n/a n/a Java Akka リモートプロトコル シリアライズ (Protobuf on top of TCP) オン・トップ・オブ・TCP 動的クラスタリング n/a n/a n/a 商用提供中
ハウツー
未定
Scalazアクター Liftアクター Scalaアクター Akkaアクター アクターの定義 アクターインスタンスの作成 アクターインスタンスの起動 アクターインスタンスの停止
関連
-
[解決済み] Scalaのアクター:受信と反応
-
[解決済み] 末尾再帰関数が最適化されるためのScalaアノテーションは何ですか?
-
[解決済み] Scalaにおけるparam: _*の意味とは?
-
[解決済み] sbtの依存関係ツリーを見るには?
-
[解決済み] Scalaの定数の命名規則?
-
[解決済み] ScalaにおけるNull/Nothing/Unitの使用法
-
[解決済み] Scala で複数の暗黙の引数を持つ関数を定義する
-
[解決済み] フォールドの早期中止
-
[解決済み] Scalaで関数を定義する3つの方法の違い
-
[解決済み] Scalaの代入が、代入された値ではなく、Unitで評価される動機は何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 述語で配列を2つに分割するには?
-
[解決済み] IntelliJ IDEAで依存関係が変更された後、build.sbtから強制的に再ロードするには?
-
[解決済み] Scalaです。リスト[Future]からFuture[List]への変換は、失敗したFutureを無視する。
-
[解決済み] Scala の Case Classes のオーバーロード・コンストラクタ?
-
[解決済み] Scalaにおけるparam: _*の意味とは?
-
[解決済み] Scala型プログラミングリソース
-
[解決済み] Scala の "new" キーワード
-
[解決済み] SBTの正しい使い方を教えてください。
-
[解決済み] scalaでサブディレクトリ内の全ファイルをリストアップするには?
-
[解決済み] scalaのApp traitとmainメソッドの違いについて