web-dev-qa-db-ja.com

AkkaのアクターとScalaのアクターモデルの違いは何ですか

Akkaアクターモデルもあることがわかったので、AkkaのアクターモデルとScalaのアクターモデルの違いは何ですか?

73
Evans Y.

ありません。アクターモデルがあり、AkkaアクターとScalaアクターはそのモデルの2つのimplementationsです。

すべてのアクターモデルは、同時実行プリミティブがアクターであると言います。

  • メッセージを受信し、次のようなメッセージの内容に応じて次に何をするかを決定します。

  • 知っている俳優にメッセージを送信する

  • 新しい俳優を作成する

そして、特定の保証を提供します、例えば:

  • すべてのアクターは一度に1つのメッセージのみを処理します

  • アクターXからアクターYに送信されたメッセージは、送信された順に到着します

ScalaとこのレベルのAkkaアクターの間には違いはありません。

それらの機能の違いについては、 Different Scala Actor Implementations Overview 。を参照してください。

58
Alexey Romanov

歴史的な答えもあります。 Scalaの作成者は、アクターフレームワークがあるべきだと考えました。ジョナス・ボネールはそれを試してみましたが、完全には満足していなかったため、新しいことに取り組み始めました。それはアッカに進化しました。しかし、Scalaの人々は自分よりも優れていると考えていたので、2011年のJfokusでは、AkkaがScalaの標準アクターフレームワークになることを発表しました。ただし、その移行には時間がかかります。

30

これは、「モデル」の意味に少し依存します-「実行モデル」または「プログラミングモデル」(およびおそらく他のモデル)を参照できます。

実行モデルには、基本的に2つあります。スレッドベースまたはイベントベースです。 Scala標準アクターライブラリには両方が含まれています。スレッドベースでは各アクターに対して1つのスレッドが使用されますが、イベントベースではスレッドプールが使用されます。 Akkaはイベントベースのモデルに基づいて構築されています。

プログラミングモデルの場合、scala標準ライブラリとAkkaには大きな違いがあります。scala標準ライブラリでは、基本的に "run"メソッドを実装します-受信メッセージを待ちたい場合は、待機状態になります(「受信」または「反応」を呼び出すことにより)プログラミングモデルは「スレッドメタファー」に従います。メタファーとは、いくつかのライフサイクルメソッドを実装することですが、「実行」メソッドはフレームワーク内に記述されています。実際、このプログラミングモデルはイベントベースの実行モデルでも非常によく機能します。

scala標準アクターのさまざまな実行モデルとプログラミングモデルに興味がある場合は、私が書いた afew問題に関する投稿 .

6