<?xml version="1.0" encoding="iso-2022-jp"?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English revision: 1.4 -->
<modulesynopsis>
<name>worker</name>
<description>マルチスレッドとマルチプロセスのハイブリッド型
ウェブサーバを実装したマルチプロセッシングモジュール</description>
<status>MPM</status>
<sourcefile>worker.c</sourcefile>
<identifier>mpm_worker_module</identifier>

<summary>
    <p>このマルチプロセッシングモジュール (MPM) 
    は、マルチスレッドとマルチプロセスのハイブリッド型サーバを
    実装しています。リクエストの応答にスレッドを使うと、
    プロセスベースのサーバよりも少ないシステム資源で、
    多くのリクエストに応答することができます。
    さらに、多くのスレッドを持った複数のプロセスを維持することで、
    プロセスベースのサーバの持つ安定性を保持しています。</p>

    <p>この MPM を制御するのに使われる最も重要なディレクティブは、
    <directive module="mpm_common">ThreadsPerChild</directive> と
    <directive module="mpm_common">MaxClients</directive> です。
    これらのディレクティブの値を操作することで、
    サーバの扱うことのできる全同時コネクション数を定義します。</p>

</summary>
<seealso><a href="../bind.html">Apache 
の使用するアドレスとポートの設定</a></seealso>

<section><title>動作方法</title>
    <p>プロセスは決まった数のスレッドを持ちます。
    負荷への適応はプロセスの数を増減により対応します。</p>

    <p>一つの制御用プロセスが子プロセスを起動します。
    子プロセスは
    <directive module="mpm_common">ThreadsPerChild</directive>
    ディレクティブで指定された一定数のスレッドを作ります。
    それから、個々のスレッドがコネクションに対して listen
    して、しかるべき時に動作します。</p>

    <p>Apache は<em>スペアの</em>、つまりアイドルなサーバスレッドの
    プールを常に維持していて、それらは入ってくるリクエストに
    答えられるように待機しています。
    このようにして、クライアントはリクエストの応答が得られるようになるために
    新しいスレッドやプロセスが生成されるのを
    待たなくてもよいようになっています。
    Apache は全プロセスのアイドルスレッドの合計数を見積もって、
    <directive module="mpm_common">MinSpareThreads</directive> と
    <directive module="mpm_common">MaxSpareThreads</directive>
    で指定された範囲の中にこの数が収まるように fork したり
    kill したりします。この操作は非常に自律的なので、
    これらのディレクティブをデフォルト値から変更する必要は
    めったにないでしょう。
    同時に応答することのできるクライアント数の最大数は、
    生成されるサーバプロセスの最大数
    (<directive module="mpm_common">MaxClients</directive>)
    と、個々のプロセスで作られるスレッド数
    (<directive module="mpm_common">ThreadsPerChild</directive>) 
    の積になります。</p>

    <p>通常 Unix では親プロセスは 80 番ポートにバインドするために
    root で起動されますが、子プロセスやスレッドは
    もっと低い権限のユーザで Apache によって起動されます。
    <directive module="mpm_common">User</directive> と
    <directive module="mpm_common">Group</directive> ディレクティブは
    Apache の子プロセスの権限を設定するのに用いられます。
    子プロセスはクライアントに送るコンテンツ全てを読めないといけませんが、
    可能な限り必要最小限の権限のみを持っているようにするべきです。
    さらに、<a href="../suexec.html">suexec</a>
    が使用されていない限り、これらのディレクティブは
    CGI スクリプトで継承される権限も設定します。</p>

    <p><directive module="mpm_common">MaxRequestsPerChild</directive>
    は、古いプロセスを停止して新しいプロセスを起動することによって、
    どの程度の頻度でサーバがプロセスをリサイクルするかを制御します。</p>
</section>

<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>Group</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>PidFile</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>Listen</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>LockFile</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>MaxClients</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>ServerLimit</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>StartServers</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>ThreadLimit</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>ThreadsPerChild</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>User</name>
</directivesynopsis>

</modulesynopsis>
