アクターはスレッドと比較してどのように機能しますか?


88

俳優がどのように良いか短い説明がありますかスレッドと比較してか?

スレッドをアクターと見なして他のスレッドにメッセージを送信することはできませんか?多少の違いはありますが、はっきりしていません。スレッドを別の方法で使用して、任意の言語でアクターを使用できますか?

回答:


78

アクターモデルはメッセージパッシングで動作します。個々のプロセス(アクター)は、互いに非同期でメッセージを送信できます。これを、私たちが通常スレッドモデルと考えるものと区別するのは、(少なくとも理論的には)共有状態がないことです。そして、共有状態がすべての悪の根源であると(当然のことながら)信じるなら、アクターモデルは非常に魅力的になります。

しかし、私たちは興奮を乗り越えてはいけません。アクターモデルは(いくつかの主張に反して)デッドロックを持つことを不可能にしません。アクターモデルは、異なるプロセス間でリソースの競合が発生するのを防ぐこともできません。たとえば、メッセージキューなどです。モデルは、特定のレベルを超えると「ロックフリー」になります。下位レベルでは、メッセージキューを調整するために、ロックが引き続き必要です。

スレッドをアクターと見なして他のスレッドにメッセージを送信することはできませんか?

ええ、はい、いいえ。いいえ、共有メモリの場所の周りにミューテックスを配置するアプローチを使用しているだけの場合。次に、スレッドはこの状態を共有します。どちらもこのメモリにアクセスでき、読み取り、再書き込みなどができます。ただし、スレッドモデルの上にアクターモデルを構築できます。実際、すべてのアクター実装にはスレッドがあります。下に。楽しみのために、各スレッドにミューテックスで保護されたキューを与えることで、このようなものを(非常にひどく)ハッキングしました。アクタースレッドのインピーダンスがどのように管理されているかを知るには、1年前の私の質問を参照しください。

スレッドを別の方法で使用して、任意の言語でアクターモデルを使用できますか?

はい。ただし、もう少し作業が必要です。あなたの好きな言語にはメッセージパッシングライブラリがあるかもしれないので、それが最初に調査することでしょう。また、不変のデータ構造の使用を調査する必要があります。データ構造が不変である場合は、基本的に「共有状態」の問題に対処していることに注意してください。複数のスレッドが、何も悪いことが起こらずに不変データへの参照を保持できます。アクター言語が関数型言語(erlang、scala)でもある傾向があるのには理由があります。

また、異なるが説得力のあるモデルであるソフトウェアトランザクショナルメモリも確認することをお勧めします。Clojureはその私のお気に入りの例です。


3
非同期メッセージパッシングベースの同時実行モデル(アクターや非同期/待機など)を使用すればするほど、それらは古い標準の同期ブロッキング同時実行モデルの2つにすぎないと思います。非同期メッセージパッシングは、ロックとモニターを使用するよりも実際には簡単でも難しいことでもありません。実際、共有された可変状態はありませんが、単一のアクターレベルでのみです。しかし、アクターにはまだ可変状態があり、実際には、アクターに協力するすべてのアクターがそれを観察できます。したがって、デッドロック、ライブロック、飢餓、競合状態など、すべて同じ問題が発生する可能性があります。
PiotrKołaczkowski 2015

2

アクターが常にメッセージを非同期で渡すとは言いませんが、それは遅すぎます。適切な例として、JActorプロジェクトは双方向メッセージ(要求/応答)を使用して、メソッド呼び出しをより適切にモデル化します。また、ほとんどのリクエストは同期的に処理されます。

JActor(Javaライブラリ)もロックを使用しません。いくつかのセマフォがスローされた、一部のアトミックデータ構造と同時データ構造のみ。メッセージパッシングは、1秒あたり約0.8億メッセージです。

https://github.com/laforge49/JActor


2
アクターモデルは、非同期通信(en.wikipedia.org/wiki/Actor_model)のみを使用して定義されます。JActorがそれを行っていない場合、それは100%アクターモデルだけではありません。それは単にその機能の多くの1つとしてアクターモデルを使用するかもしれません。
BT
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.