目次に戻る マルチスレッド対応

NOMAD Ver 6.0 はマルチスレッド動作をサポートします。マルチスレッド対応により、1つのプロセスで複数の処理が実行できるようになりました。

概要
以前のバージョンではひとつのNOMADプロセスにつき、ひとつのセッションが割り当てられ、NOMADプロシージャを実行していました。NOMAD Ver 6.0ではNOMADプロセスから複数のスレッドが生成され、各スレッドにおいてセッションを開始し、プロシージャを実行します。
このマルチスレッド動作により、リソースの削減・パフォーマンスの向上を実現します。


マルチスレッドのイメージ


クライアント側から見て、WebブラウザがDSMCGIやDSMAPI(ISAPI)を呼び出し、NOMADアプリケーションから実行結果のHTMLを受け取るという動作は今までと変わりません。
またサーバー側でも、今までのバージョンで動作していたアプリケーションをそのまま利用できます。各スレッドへのタスクの割り振りはDSMSRVが行うため、アプリケーションの配備の方法も変わりません。設定ファイル「dsm.ini」によってプロセス数やスレッド数を調整することができます。スレッド数を1にすることで以前のバージョンと同じ、シングルスレッドによる動作も可能です。

NOMADコマンドラインから起動した場合は、シングルスレッドモードになります。

マルチスレッド動作環境の設定
「dsm.ini」の項目MaxCoexistHostにより、マルチスレッド動作の環境を設定できます。
書式
MaxCoexistHost=defaultMaxThread[:defaultThreadPool [, specialNomad:maxThread[:threadPool]]]

解説
defaultMaxThread
NOMADプロセスひとつに対するスレッド数。特別に指定のないNOMADはすべてこの値を適用します。
defaultThreadPool
NOMAD起動時に作成するスレッドの数。特別に指定のないNOMADはすべてこの値を適用します。デフォルト値はdefaultMaxThreadの1/4となります。
specialNomad:maxThread
インデックス番号によって指定した特別のNOMADに対しスレッド数を設定します。この指定は複数のNOMADに対し繰り返すことができます。
threadPool
インデックス番号によって指定した特別のNOMAD起動時に作成するスレッド数。デフォルト値はdefaultThreadPoolを指定している場合はその値、defaultThreadPoolを指定していない場合はmaxThreadの1/4となります。

設定例
[DSMCGI]
MaxBNOMAD=5
MaxCoexistHost=1, 0:100, 1:150:100
;MaxBNOMAD 5個の内、デフォルト(2、3、4番)は1スレッド。
;ただし0番は100スレッド、スレッドプール25、
;1番は150スレッド、スレッドプール100。

MaxCoexistHost=100:50, 4:300
;MaxBNOMAD 5個の内、デフォルト(0〜3番)は100スレッド
;ただし、4番は300スレッド
;すべてのNOMADのスレッドプールは50。

MaxBNOMAD=2
MaxCoexistHost=300
;MaxBNOMAD 2個で、ともに300スレッド、スレッドプール75。

※スレッドプール数とは従来のMaxBNOMADonMEMに相当するもので、B/NOMAD起動時に待機状態のスレッドをプール(作成)しておくことによって、レスポンスをアップすることができます。リクエストを受けてスレッドがスレッドプール数以上に作成された場合、セッション終了後QuitDelayMinを経過したらそのスレッドが自ら終了して、リソースを解放します。

カレントセッション・インデックスの取得
プロシージャが自分を実行しているセッションのインデックスを取得するための、システム&変数が追加されました。
書式
&SESSION_INDEX
解説
&SESSION_INDEXにカレントセッションのインデックス番号がセットされ、NOMADのプロシージャから直接参照できます。
これを用いて、自分がどのセッションを使っているかを調べることができます。
このインデックス番号と組み合わせてセッション間ユニークなファイル名を簡単に作成できます。
また、OUTPUT/ERRORログファイルには自セッションのインデックス番号が含まれるので、これらをオープンするためにも使えます。

シングルスレッド時には、値は&NAVです。

マルチスレッド時のディレクトリ構成
マルチスレッド動作時には、「dsm.ini」の項目bnCurPathで設定されたディレクトリ下に、以下のようなツリー構造が作成されます。

ディレクトリ構成のイメージ

「.bnomX」ディレクトリが各NOMADプロセス、「.sessX」ディレクトリが各スレッド(セッション)に対応しています。
「.bnomX」ディレクトリにはOUTPUT/ERRORログファイルがスレッド別にインデックスをつけて出力されます。また.udbファイル(NOMADが使用する情報を格納するテンポラリ的NDBファイル)もこのディレクトリに保存されます。
「.sessX」ディレクトリは実行されているプロシージャのカレントディレクトリにあたります。ファイルを相対パスで指定する場合はこのディレクトリが基準となります。ファイル名のみで新規作成することで、スレッド間セーフな一時ファイルを使用できます。新規作成されたNDBファイルもここに保存されます。