[解決済み] スレッドと比較して、アクターはどのように動作するのですか?
質問
どのようにすれば良いのか、簡単な説明はありますか? アクター がスレッドと比較してどのように機能するかについて、良い簡潔な説明はありますか?
スレッドはアクターとして見ることができ、他のスレッドにメッセージを送ることはできないのでしょうか?私はいくつかの違いを見ますが、それは私にとってそれほど明確ではありません。私は アクター を使うことはできますか?
どのように解決するのですか?
アクターモデルはメッセージパッシングで動作します。 個々のプロセス (アクター) は、互いに非同期でメッセージを送信することが許可されています。 私たちが通常スレッド モデルとして考えているものと異なるのは、(少なくとも理論的には)共有状態が存在しないことです。 そして、共有状態がすべての悪の根源であると (正当な根拠をもって) 信じているならば、アクター モデルは非常に魅力的なものになります。
しかし、興奮しすぎるのはよくありません。 アクター モデルは、(いくつかの主張に反して) デッドロックの発生を不可能にするものではありません。 また、アクターモデルは、異なるプロセス間でリソースの競合が発生するのを防ぐものでもありません (たとえば、メッセージ キューなど)。 このモデルは、あるレベル以上ではロックフリーであるに過ぎません。 より低いレベルでは、メッセージキューを調整するために、ロックはまだ必要です。
スレッドをアクターとして見て、他のスレッドにメッセージを送ることはできないのでしょうか?
まあ、イエスでもありノーでもあります。 いいえ、単に共有メモリ位置にミューテックスを置くというアプローチを使用している場合です。 スレッドはこの状態を共有し、両方ともこのメモリにアクセスでき、それを読んだり書き直したりすることができます。 しかし、スレッドモデルの上にアクターモデルを構築することができますし、実際、すべてのアクター実装はその下にスレッドを持ちます。 私は、面白半分に、各スレッドにミューテックスで保護されたキューを与えることで、このようなものを(非常にひどく)ハックしたことがあります。 アクターとスレッドのインピーダンスがどのように管理されているかを知るには、以下を参照してください。 1年前の私の質問 .
スレッドを使い分けることで、どの言語でもアクターモデルを利用できるのでしょうか?
はい、しかしそれにはもう少し作業が必要です。 あなたの好きな言語にはメッセージパッシングライブラリがあるかもしれませんので、まずそれを調査することになるでしょう。 また、イミュータブルなデータ構造の使用も調査する必要があります。 データ構造がイミュータブルであれば、本質的に共有状態の問題に対処できることに注意してください。 アクター言語が関数型言語(erlangやscala)になりがちなのには理由があるのです。
また、Software Transactional Memoryも見てみたいかもしれません。これは違うけど、説得力のあるモデルです。 Clojureは私のお気に入りの例です。
関連
-
[解決済み] スレッドコンテンションとは何ですか?
-
[解決済み] 初心者のためのアトミック操作とは?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] プロセスとスレッドの違いは何ですか?
-
[解決済み】サーブレットはどのように動作するのですか?インスタンス化、セッション、共有変数とマルチスレッド
-
[解決済み】スレッド間で共有されるリソースは何ですか?
-
[解決済み】Node.jsに対するHaskellの対応について教えてください。
-
[解決済み】LMAXのディスラプターパターンはどのように機能するのですか?
-
[解決済み】Node.jsは内部でThreadsに依存しているのに、どうして本質的に高速なのですか?
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Not on FX application thread; currentThread = JavaFX Application Thread エラーを回避する方法は?
-
[解決済み] スレッドコンテンションとは何ですか?
-
[解決済み] Dask: dask delayでどのようにコードを並列化するか?
-
[解決済み] POSIXシステムでのゾンビスレッド
-
[解決済み] 初心者のためのアトミック操作とは?
-
[解決済み] Pythonでループ内の演算をマルチスレッド化する方法
-
[解決済み】スレッド間で共有されるリソースは何ですか?
-
[解決済み】セマフォとモニター、何が違うの?
-
[解決済み】Node.jsに対するHaskellの対応について教えてください。
-
[解決済み] サーブレットベースのWebアプリケーションでバックグラウンドタスクを実行するには?