Web開発のための基礎知識

マルチスレッドとマルチプロセス

HTTPサーバーの最上部のPGM-QZHBHTTP がHTTPサーバーであることを説明しましたがもう少し詳しく、
このHTTPサーバーを眺めてみましょう。

                                  ジョブ定義属性表示                               
                                                             システム :   S103NG3M 
    ジョブ :   DEFAULT        ユーザー :   QTMHHTTP       番号 :   094160          
                                                                                   
    印刷キー形式  . . . . . . . . . . . . . . . . . . :   *PRTHDR                  
    分類順序  . . . . . . . . . . . . . . . . . . . . :   *HEX                     
      ライブラリー  . . . . . . . . . . . . . . . . . :                            
    言語識別コード  . . . . . . . . . . . . . . . . . :   JPN                      
    国または領域 ID . . . . . . . . . . . . . . . . . :   JP                       
    コード化文字セット識別コード  . . . . . . . . . . :   5026                     
    省略時のコード化文字セット識別コード  . . . . . . :   5026                     
    文字識別コード制御  . . . . . . . . . . . . . . . :   *DEVD                    
    ジョブ・メッセージ待ち行列の最大サイズ  . . . . . :   16                       
    ジョブ・メッセージ待ち行列満杯時の処置  . . . . . :   *WRAP                    
    マルチスレッド可能  . . . . . . . . . . . . . . . :   *YES                     
    補助記憶域プール・グループ  . . . . . . . . . . . :   *NONE                    
    スプール・ファイル処置  . . . . . . . . . . . . . :   *KEEP                    

となっており、注意したいのは 「 マルチスレッド可能 = *YES になっておりJOB記述も他の子プロセスとは
異なっています。つまり通常、ユーザーが使用しているJOBとは異なってHTTPサーバーは「マルチスレッド」
という形式で起動しています。
これは EnterpriseServer で提供されるHTTPサーバーである 「Alaska」 でも同じことです。

HTTPサーバーを単に使用するだけではマルチスレッドを理解する必要もありませんが、今後の他の
適用業務開発に携わるのであれば、マルチスレッドの理解は開発の範囲を大幅に拡大する重要な要素となります。

それではマルチスレットとは一体、何なのでしょうか?
気づかなくても日常、いつも目にしているはずです。
Windows で何かAppを導入したり、長時間かかるダウンロードを実行するときにはステータスを示すインジケータの
ダイアログが表示されます。あれがマルチスレッドの最も身近な例です。
ダウンロードを実行しながら一方ではインジケータを表示するという2つの仕事を並行して行う、
つまり 複数の仕事を同時にこなす処理 のことを マルチスレッドと言います。

これまで開発してきたプログラムのことを思い浮かべてください。
他のPGMを親PGMから呼び出して実行したとしてもたいていは子PGMの処理が終わるまでは親PGMは
待機していたはずです。子PGMの処理が終了してから親PGMに制御が戻されて実行は復帰します。
ところが子PGMを呼び出すのではなく、同じ親プログラムの中だけで表示と印刷と更新を同時に並行して
行えたとすると、どんなに効率的でしょうか?これがマルチスレッドです。

HTTPサーバーの場合は1つのサーバーだけで、かなり多くのブラウザからの要求に即座に応える必要があります。
あるクライアントからの要求を処理しているあいだには次に接続要求を行ったクライアントは前のクライアントの
処理が終わるまで待たなければならないのでは、HTTPサーバーとしての用を成しません。
そのため、あるクライアントの要求を処理しているときにでもHTTPサーバーは、次のクライアントからの要求が
あれば即座に応答します。

つまりHTTPサーバーはマルチスレットとしてユーザーからの要求をいつも待ち受けているのです。
そればかりではなく、要求したHTMLページがGIFファイルやスタイル・シートなどの複数のコンテンツで構成されて
いる場合には、ブラウザは直ちにそれらをHTTPサーバーに送るように要求します。
そして構成コンテンツは別のスレッドから送信されます。
つまり、1つのHTMLページであっても通信は複数のスレッドでほぼ同時に実行されます。
少しでも早く応答を返すためにもHTTPサーバーにはマルチスレッド機能が必要となるわけです。

HTTPサーバーに限らずあなたの社の System i が絶えず取引先からのデータ要求に対して待ち受けていて
データを提供するシステムを構築するのであれば、それはマルチスレッドとして構築すべきでしょう。
またマルチスレッドは System i 内の少ないリソースで複数の処理を同時にこなす、つまりコンピュータの
性能を最大限に引き出す、夢のような開発技法でもあります。
大量のバッチ処理の時間に頭を痛めているのであればマルチスレッドの採用を検討する値打ちはあります。

EnterpriseServer が提供する Alaska の場合は マルチスレッド だけではなく System i のリソースに
余裕があれば複数JOBを同時に稼動させてマルチスレッドより更に処理効率を図れる マルチプロセス
という方法も選択することができます。
これは OS/400の特性を十分に生かした方法です。