4D v16.3ワーカーについて |
||||||||
|
4D v16.3
ワーカーについて
ワーカーについて
ワーカープロセスとは、簡単かつ強力なプロセス間通信の方法です。この機能は非同期のメッセージシステムに基づいており、プロセスやフォームを呼び出して、呼び出し先のコンテキストで任意のメソッドを指定パラメーターとともに実行させることができます。 注: CALL FORM コマンドを使うことで、あらゆるフォームのコンテキストにおいても、任意のプロジェクトメソッドを指定のパラメーターで実行させることができます。 あらゆるプロセスは CALL WORKER コマンドを使用することでワーカープロセスを "雇用" することができ、ワーカーのコンテキストにおいて任意のプロジェクトメソッドを指定のパラメーターで実行させることができます。つまり、呼び出元のプロセスとワーカーの間で情報の共有が可能です。 これらの新機能は、4D のプロセス間通信における次のニーズに対応します:
注: CALL WORKER および CALL FORM のコマンドは主に、64-bit版で提供されているプリエンプティブ・プロセスのコンテキストにおけるプロセス間通信のために開発されましたが、これらは 32-bit版でも提供されており、コオペラティブ・プロセスにおいても同様に使用することができます。 プロジェクトメソッドの実行を別プロセスに依頼するときに、ワーカー を使います。ワーカーには次のものが付随します:
(*) ワーカー名は文字の大小を区別します。つまり、"myWorker" と "MyWorker" は異なるワーカーとして同時に存在できます。 CALL WORKER コマンドを使って、プロジェクトメソッドの実行をワーカーに依頼します。初めてワーカーを使用するときに、ワーカーはメッセージボックスとともに生成され、依頼内容を関連プロセスにて実行します。ワーカープロセスが終了してもメッセージボックスは開いたままで、次のメッセージを受け取るとワーカープロセスが再開します。 この一連の流れをアニメーションで表しました: New process コマンドとは異なり、ワーカープロセスはメソッドの実行終了後も生きています。つまり、特定のワーカーが実行するすべてのメソッドは同一プロセス内でおこなわれ、すべてのプロセス情報 (プロセス変数、カレントレコード、カレントセレクション、など) が保持されます。続けて実行されるメソッドはこれらの情報を共有することになるため、プロセス間の通信が可能になります。ワーカーのメッセージボックスは連続した呼び出しを非同期的に扱います。 CALL WORKER はメソッド名と引数をカプセル化し、メッセージとしてワーカーに受け渡します。ワーカープロセスがまだ存在していなければ生成され、メッセージボックスに格納されたメッセージを実行します。したがって、大体の場合において CALL WORKER は、ワーカーが受け取ったメソッドを実行するより先に終了します (非同期的な実行)。そのため CALL WORKER は戻り値を返しません。実行後の情報をワーカーから返してもらうには、CALL WORKER を利用してワーカーの呼び出し元に情報を返す必要があります (コールバック)。コールバックをおこなうには、呼び出し元のプロセスもワーカーである必要があります。 New process コマンドで作成されたプロセスはメッセージボックスを持たないため、CALL WORKER によってワーカーとして使うことはできません。そのため、同プロセスがワーカーをコールすることは可能でも、CALL WORKER によるワーカーからのコールバックを受けられないことに留意が必要です。 ワーカープロセスは、ストアドプロシージャーを使って 4D Server 上に作成することもできます。例えば、CALL WORKER コマンドを実行するメソッドを Execute on server コマンドから実行します。 ワーカープロセスを閉じるには KILL WORKER コマンドをコールします。これによってワーカーのメッセージボックスは空にされ、関連プロセスはメッセージの処理を停止し、現在のタスク完了後に実行を終了します。 ワーカープロセスを新規生成する際に指定したメソッドがワーカーの初期メソッドになります。次回以降の呼び出しで method パラメーターに空の文字列を受け渡した場合、CALL WORKER はこの初期メソッドの実行をワーカーに依頼します。 ユーザーおよびアプリケーションモードで 4D データベースを開く際に作成されるメインプロセスはワーカーです。したがって、CALL WORKER で呼び出すことができます。メインプロセスの名称は 4D の使用言語により異なりますが、プロセス番号は常に 1 です。CALL WORKER でメインプロセスを呼び出す場合には、プロセス番号を使うのが便利でしょう。 PROCESS PROPERTIES コマンドを使った場合、メインプロセス以外のすべてのワーカープロセスは Worker process (5) をプロセスの種別として返します (メインプロセスは Main process (-1) です)。 ランタイムエクスプローラーおよび 4D Server の管理画面においては、アイコンからもワーカープロセスを識別することができます:
注: ほかの既存プロセスのアイコンも 4D v15 R5 で更新されています。 二つのワーカーと一つのフォーム間の通信の流れを図に表しました。通信の内容は文字列です:
参照
|
プロパティ
プロダクト: 4D
履歴
初出: 4D v15 R5 ARTICLE USAGE
ランゲージリファレンス ( 4D v16) |
||||||