4.1.3 HTTP Serverのプロセス構造(Windows版)
HTTP Serverのプロセス構造を次に示します。
HTTP Serverを起動すると,制御プロセスが起動します。制御プロセスは,サーバプロセスを起動しその稼働を監視します。サーバプロセスが起動すると同時にメインスレッドが起動します。メインスレッドは,リクエストを受信するアクセプトスレッドを一つと,リクエストを処理するサーバスレッドをThreadsPerChildディレクティブで指定した個数だけ起動します。
クライアントからのTCP接続は,Listenディレクティブで指定したIPアドレスとポートからOSが受信し,OS内のListenキューに保留します。ListenキューのサイズはListenBacklogディレクティブで指定できます。Listenキューに格納できなかったTCP接続は確立されません(このとき,HTTP Serverはクライアントにステータスコードを返却しません)。アクセプトスレッドはListenキューからTCP接続を取り出し,HWSMaxQueueSizeディレクティブで指定した大きさのリクエストキューに登録します。それをサーバスレッドの一つが取り出してHTTPリクエストを受信し処理します。HWSMaxQueueSizeディレクティブ指定値を超えたためリクエストキューに格納できなかったTCP接続は,アクセプトスレッドによって閉じられます(このとき,HTTP Serverはクライアントにステータスコードを返却しません)。
サーバプロセス数およびサーバスレッド数が増減することはありません。
制御プロセスおよびサーバプロセスともに,プロセス名(実行プログラム名)はhttpsd.exeです。制御プロセスのプロセスIDは,PidFileディレクティブに指定したファイルに出力します。
HTTP/2プロトコルを使用している場合は,サーバスレッドのほかにHTTP/2プロトコルを処理するためのワーカスレッドが生成されます。詳細は「4.17.3 ワーカスレッド」を参照してください。
また,HTTP Serverのリバースプロキシ機能を使用した場合,バックエンドサーバとの間にコネクションが確立されます。そのコネクションの最大数については,「4.7.4(5) 性能に関する注意事項」を参照してください。