Skip to main content
Version: Next

アクタ モード

アクタ モードは同時実行プログラミング モデルです。このプログラミング モデルの適用により、一部のシステムの同時実行の問題を解決できます。ここで説明する同時実行の問題は、コンピュータが同じデータを論理的に処理するときに、同時に開始される複数の要求が存在するためにデータが正しくない可能性がある問題を指します。この問題は、マルチスレッド プログラミング中に発生する必要があります。簡単な例として、同期ロックなしで 100 スレッドを使用して、メモリ内の 1 つのint変数に対して++操作を同時に実行します。その後、最終的な変数の結果は 100 未満になる傾向があります。ここでは、アクタ モードがこの問題を回避する方法について説明します。

まず、理解しやすいように、読者はここでアクタをオブジェクトと見なします。オブジェクトの言語(Java, C#など)で利用する場合、Actorはnew キーワードを介して作成するオブジェクトである。ただし、このオブジェクトには特別な機能があります:

自身の状態を持つ。オブジェクトは、オブジェクト指向言語が基本的に持っている独自のプロパティを持つ可能性があります。Actorモードではシステム属性がActorと呼ばれたときに呼ばれる。アクタの状態は、アクタ自体によって維持されます。

これは2つの点を強調します:

まず、アクタの状態はそれ自体によってのみ変更できますが、アクタの状態を外部から変更するには、アクタを呼び出すことによってのみ変更できます。

アクタの状態を更新します

第 2 に、アクタの状態はアクタ内でのみ維持され、現在のアクタ以外のオブジェクトと共有されません。ここでいう非共有とは,外部属性の変更によってアクタの内部状態の変化を引き起こできないことを強調する.これは主に、オブジェクト参照言語機能を持つ一部のプログラミング言語と区別するために行います。例えば、:が C# のclass の public 属性の場合、パスを参照タイプとして外部にこのクラスを取得すれば、クラスのプロパティが変更可能になります。ただし、これはアクタ モードでは許可しません。

アクタの状態を共有します

ただし、Actor 内から外部にデータを読み取ることができますが、これは許容されます。

アクタの状態を読み取ります

スレッド。通常、アクタは同時に 1 つの呼び出ししか受け付けられません。ここでいうスレッドとは、コンピュータ内のスレッドを意味するのではなく、「アクタが一度に 1 つの要求しか処理できないという特徴」を強調するために使用される単語です。現在のアクタが呼び出しを受け入れる場合、残りの呼び出しはブロックされ、呼び出しが終了するまで次の要求は許可されません。これは、同期ロックのメカニズムに似ています。これにより、アクタの内部状態を変更するときに同時実行の問題が発生する可能性が回避されます。具体的な説明:Actor が100個のスレッドで並列に展開した場合、Actor の変数を ++ に変更することができます。最終的な状態の値は 100 である必要があります。

アクタを同時に呼び出します

ただし、シングル スレッドも絶対ではなく、同時実行の問題がない要求では、同時実行処理が許可されます。たとえば、通常、同時実行の問題を持つアクタの状態を読み取る場合、この時点で同時実行操作が許可されます。

アクタを同時に読み取ります