4D v16.3

プロセス

ホーム

 
4D v16.3
プロセス

プロセス  


 

 

4Dのマルチタスク機能を使用すれば、個別のデータベース処理を同時に実行することができます。これらの処理をプロセスと呼びます。

マルチプロセスは、1つのコンピュータ上でのマルチユーザのようなものです。それぞれの処理は個別のタスクです。つまりそれぞれのメソッドを個別のデータベースタスクとして実行することができるということです。

この節では以下の点について説明します:

  • プロセスの作成とクリア
  • プロセスの要素
  • ユーザプロセス
  • 4Dが作成するプロセス
  • ローカルおよびグローバルプロセス
  • プロセス間のレコードロック

Note: この節ではストアドプロシージャを説明していません。この点については4D Server Referenceマニュアルのストアドプロシージャの節を参照してください。

新規プロセスを作成するにはいくつかの方法があります:

  • デザインモードにおいて、メソッド実行ダイアログボックスで新規プロセスチェックボックスをチェックした後、メソッドを実行する。メソッド実行ダイアログボックスで選択したメソッドが (そのプロセスをコントロールする) プロセスメソッドとなります。
  • メニューを選択してプロセスを開始できます。メニューエディタにおいて、メニューを選択して新規プロセス開始チェックボックスをクリックします。メニューコマンドに関連付けられたメソッドがプロセスメソッドです。
  • New process関数を使用する方法。New process関数の引数として渡されたメソッドがプロセスメソッドです。
  • Execute on server関数を使用して、サーバ上にストアドプロシージャを作成する。関数の引数として渡されたメソッドがプロセスメソッドです。
  • CALL WORKERコマンドを使用する方法。ワーカープロセスが既に存在していない場合、新たに作成されます。

プロセスは以下の条件でクリアできます。最初の2つは自動的に行われます:

  • プロセスメソッドの実行が完了したとき。
  • ユーザがデータベースを終了したとき。
  • メソッドからプロセスを中止するか、またはデバッガからアボートボタンを使用した場合。
  • ランタイムエクスプローラからアボートを選択した場合。
  • KILL WORKERコマンドを呼び出した場合(ただしワーカープロセスを削除する場合のみ)。

プ ロセスは別のプロセスを作成することができます。プロセスは階層構造にはなっていません。どのプロセスから作成されようと、すべてのプロセスは同等です。 いったん、“親”プロセスが“子”プロセスを作成すると、親プロセスの実行状況に関係なく、子プロセスは処理を続行します。

各プロセスには個々の要素があります。プロセスには以下の3種類の要素があります:

  • インタフェース要素: プロセスを表示するのに必要な要素。
  • データ要素: データベース内のデータに関連する情報。
  • ランゲージ要素: メソッドで使用される、アプリケーションを開発する際に重要な要素。

インタフェース要素には以下のものがあります:

  • メニューバー: 各プロセスは、独自のカレントメニューバーを持つことができます。最前面のプロセスのメニューバーがデータベースのカレントメニューバーになります。
  • 1つ以上のウィンドウ: 各プロセスは、1つまたは複数のウィンドウを同時に開くことができます。ウィンドウをまったく持たないプロセスもあります。
  • 1つのアクティブ(最前面)ウィンドウ: プロセスは、複数のウィンドウを同時に開くことができますが、アクティブウィンドウは各プロセスに1つしかありません。複数のアクティブウィンドウを持つには、アクティブウィンドウの数だけのプロセスを起動しなければなりません。
Notes:
  • プロセスはデフォルトではメニューバーを含みません。つまり編集メニューのショートカット(具体的には、カット/コピー/ペースト)はプロセスウィンドウでは利用できません。プロセスからダイアログボックスや4Dエディター(フォームエディター、クエリエディター、Request等)などを呼び出した場合、ユーザーがコピー/ペーストなどのショートカットを利用できるようにするためには、編集メニューに相当するものがプロセスにインストールされているようにする必要があります。
  • プリエンプティブプロセスと、サーバ上で実行されるプロセス (ストアドプロシージャ) はインタフェース要素を含んではいけません。

データ要素は、データベースが使用するデータを参照します。以下のようなデータ要素があります:

  • テーブルごとのカレントセレクション: 各プロセスは、個々にカレントセレクションを持ちます。1つのテーブルに対して別々のプロセスにそれぞれのカレントセレクションを持つことができます。
  • テーブルごとのカレントレコード: 各テーブルは、プロセスごとに異なるカレントレコードを持つことができます。

Note: データ要素に関するこの記述は、プロセスがグローバルスコープの場合に有効です。デフォルトですべてのプロセスはグローバルです。後述のグローバルプロセスとローカルプロセスの段落を参照してください。

プロセスのランゲージ要素は、4Dでのプログラミングに関連した要素です。

  • 変数: すべてのプロセスは独自のプロセス変数を持っています。詳細はの節を参照してください。プロセス変数はその本来のプロセスの範囲内でのみ認識されます。
  • デフォルトテーブル: プロセスごとに独自のデフォルトテーブルを持っています。
  • 入力フォームと出力フォーム: 各プロセスの各テーブルに対して、デフォルトの入力フォームと出力フォームをメソッドから設定することができます。
  • プロセスセット: 各プロセスは、独自のプロセスセットを持っています。LockedSetはプロセスセットです。プロセスセットはプロセスメソッドが終了すると直ちに消去されます。
  • プロセスごとのOn Error Call: 各プロセスは、独自のエラー処理メソッドを持ちます。
  • デバッグウィンドウ: 各プロセスは、独自のウィンドウを持つことができます。

ユーザプロセスは、特定のタスクを行うために開発者が作成するプロセスです。ユーザプロセスはカーネルプロセスと処理時間を共有します。例えばWeb接続プロセスはユーザプロセスです。

4Dアプリケーションは自身が必要とするプロセスも作成します。以下のプロセスは4Dが作成し管理します:

  • メインプロセス: メインプロセスはユーザインタフェースのウィンドウ表示を管理します。
  • デザインプロセス: デザインプロセスはデザインモードのウィンドウとエディタを管理します。インタプリタコードを含まないコンパイルされたデータベースには、デザインプロセスはありません。
  • Webサーバプロセス: Webサーバプロセスは、Web上にデータベースが公開された時に起動します。これに関する詳細はWebサーバ設定と接続管理の節を参照してください。
  • キャッシュマネージャプロセス: キャッシュマネージャプロセスはデータベースのディスクI/ O を管理します。このプロセスは4D や 4D Server が実行されるとすぐに開始されます。
  • インデックスプロセス: インデックスフィールドは、分離されたプロセスとしてデータベースのフィールドのインデックスを管理します。このプロセスはフィールドのインデックスが構築されたり削除されたりする際に作成されます。
  • On Event Managerプロセス: このプロセスはON EVENT CALL コマンドでイベント処理メソッドがインストールされると、作成されます。このプロセスはイベントが発生すると、ON EVENT CALLでインストールされたイベントメソッドを実行します。イベントメソッドはこのプロセスのプロセスメソッドです。このプロセスは、メソッドが実行されていなくても継続して実行されます。イベント処理はデザインモードでも発生します。

4D v15 R5 64bit版以降、4Dではコンパイルモードにおいてプリエンプティブなユーザープロセスを作成する事ができるようになりました。以前のバージョンでは、コオペラティブなユーザープロセスのみが利用可能でした。

プリエンプティブモードで実行された場合、プロセスはCPUへと割り当てられます。プロセス管理はその後システムに委託され、システムはマルチコアマシン上において、各CPUを個別にプロセスへと割り当てる事ができるようになります。コオペラティブモードで実行された場合、全てのプロセスは親アプリケーションスレッドによって管理され、例えマルチコアマシン上であったとしても同じCPUを共有します。

結果として、プリエンプティブモードでは、アプリケーションの全体的なパフォーマンスが向上します。特にマルチコアマシン上においては、複数のプロセス(スレッド)が文字通り同時に実行可能なため、顕著です。しかしながら、実際の早さの差は実行されるオペレーションによって異なります。プリエンプティブモードではそれぞれのスレッドは他のスレッドから独立していて、アプリケーションによって直接管理されている訳ではないため、プリエンプティブな使用に合致させたいメソッドに対しては、特定の制約が課せられる事になります。

プリエンプティブプロセスの管理については、プリエンプティブ4Dプロセスの章で説明があります。

プロセスのスコープにはローカルとグローバルがあります。デフォルトですべてのプロセスはグローバルです。

グローバルプロセスはデータへのアクセスや操作を含め、あらゆる処理を実行できます。ほとんどの場合グローバルプロセスを使用します。

ローカルプロセスは、データアクセスを必要としない処理の場合にだけ使用することをお勧めします。例えば、イベント処理メソッドを実行、またはフローティングウィンドウ等のインタフェース要素を制御するためにローカルプロセスを使用します。

名前によってプロセスがローカルであることを指定します。ローカルプロセス名は、先頭にドル記号 ($) を付ける必要があります。

警告: ローカルプロセスでデータアクセスを行った場合、メインプロセスでアクセスすることになり、そのプロセス内で実行される処理との間でコンフリクトが起きるおそれがあります。

4D Server: データアクセスを行わない処理に対し、クライアント側でローカルプロセスを使用すると、サーバの負荷が軽減されます。

他のプロセスが修正のためにレコードを正常にロードすると、そのレコードはロックされます。ロックされているレコードは、別のプロセスでロードすることはできますが、修正することはできません。レコードは、それを修正しているプロセス内でのみロックが解除されます。レコードをロック解除の状態でロードするには、テーブルが“読み書き可能モードになっていなければなりません。詳細はの節を参照してください。



参照 

プロジェクトメソッド
メソッド
変数

 
プロパティ 

プロダクト: 4D
テーマ: プロセス

 
履歴 

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v16)
ランゲージリファレンス ( 4D v16.1)
ランゲージリファレンス ( 4D v16.2)
ランゲージリファレンス ( 4D v16.3)