46

アクター モデルはいつ使用する必要がありますか?

もちろん、デッドロックのない環境を保証するものではありません。

アクター A は、B が A を待っている間、B からのメッセージを待つことができます。

また、アクターが次のタスクに移る前にメッセージが処理されたことを確認する必要がある場合、メッセージを送信し、単純なブロックではなく「メッセージが処理されました」というメッセージを待つ必要があります。

モデルの力は?

4

4 に答える 4

30

並行性の問題がある場合、アクターを使用するかどうかを決定するために何を探しますか?

最初に問題を定義しようと思います...主な動機は、ネストされた for ループまたは再帰の高速化ですか? その場合、単純なタスク ベースのアプローチまたは並列ループ アプローチが (アクターではなく) 適切に機能する可能性があります。

ただし、依存関係と共有状態の調整を含むより複雑なシステムがある場合は、アクター アプローチが役立ちます。具体的には、アクターとメッセージ パッシング セマンティクスを使用することで、実際にその状態 (メッセージ) のコピーを作成してそれらに反応することで、明示的なロックを使用して共有状態を保護することを回避できることがよくあります。

これは、食事の哲学者や睡眠中の理髪師の問題などの古典的な同期の問題で非常に簡単に行うことができます。しかし、「アクター」を使用して、より現代的なパターンを支援することもできます。つまり、ファサードをアクターにすることができ、モデル ビューとコントローラーを相互に通信するアクターにすることもできます。

私が観察したもう 1 つのことは、アクターのセマンティクスはほとんどの開発者が学習可能であり、ロックされたものよりも「安全」であることです。これは、抽象化レベルを上げて、データへのすべてのアクセスをロックで保護するのではなく、そのデータへのアクセスの調整に集中できるようにするためです。例として、データ メンバーを持つ単純なクラスがあるとします。そのデータ メンバーへのアクセスを保護するためにそのクラスにロックを配置することを選択した場合、そのクラスのすべてのメソッドは、ロックの下でそのデータ メンバーにアクセスしていることを確認する必要があります。これは、他の人 (またはあなた) が後でクラスを変更するときに特に問題になります。そのロックを使用することを覚えておく必要があります。

一方、そのクラスがアクターになり、データ メンバーがメッセージ経由で通信するバッファーまたはポートになる場合、セマンティクスがバッファーに組み込まれており、非常に明示的にわかるため、ロックを取得することを覚えておく必要はありません。バッファのタイプに基づいてブロックするかどうか。

-リック

于 2009-11-29T01:04:02.310 に答える
24

Actor の使用は、少なくとも 2 つのケースで「自然」です。

  1. 問題を一連の独立したタスクに分解できる場合。
  2. 明確なワークフロー (つまり、データフロー プログラミング)によってリンクされた一連のタスクで問題を分解できる場合。

たとえば、一連のフィルターを使用して複雑なデータを処理する場合、各アクターが上流のアクターからデータを受け取り、下流のアクターにデータを設定するアクターのパイプラインを使用するのは簡単です。

もちろん、このデータフローは線形であってはなりません。パイプラインでステップが遅い場合は、代わりに同じジョブを実行するアクターのプールを使用できます。負荷分散の問題を解決する別の方法は、一種の仮想かんばんシステムで編成された需要主導のアプローチを代わりに使用することです。

もちろん、ほとんどすべての興味深いケースでアクター間の同期が必要になりますが、従来のマルチスレッド アプローチとは対照的に、この同期は実際には「具体的」です。工場にいる人たちを想像し、起こりうる問題を想像することができます (労働者は仕事を失い、上流工程が速すぎ、中間製品は巨大な保管場所を必要とするなど)。

于 2009-11-29T08:00:31.103 に答える
2

私はアクターの専門家ではありませんが、アクター モデルを使用する場合の 2 セントは次のとおりです。アクター モデルは、すべての同時実行アプリケーションに適しているわけではありません。同時実行の問題を解決します。アクターが実際に活躍するのは、イベント ドリブン アプリケーションを作成するときです。たとえば、アプリケーションがあり、アプリケーションでユーザーがクリックしたものをリアルタイムで追跡しているとします。アクターはステートフルであるため、アクターを使用して、ユーザー、デバイス、またはビジネス要件によって分離されたアクティビティをリアルタイムで実行できます。したがって、たとえば、一部のユーザーがクリックしたアクターにいる場合shirtsクーポンの通知を送信できます。また、金融 (価格設定、不正検出)、マルチプレイヤー ゲームなど、アクターが役立つアプリケーションもあります。

于 2020-05-21T02:57:45.437 に答える