スレッドおよびタスクのアーキテクチャ

スレッドは、同時に実行される複数の実行パスにアプリケーション ロジックを分割できるオペレーティング システムの機能です。この機能は、複雑なアプリケーションに同時に実行できるタスクが多数ある場合に役立ちます。

オペレーティング システムがアプリケーションのインスタンスを実行するときは、プロセスという単位が作成され、インスタンスを管理します。プロセスには実行のためのスレッドが 1 つあります。これは、アプリケーション コードで実行される一連のプログラミング命令です。たとえば、直列に実行できる 1 つの命令セットで構成される単純なアプリケーションの場合、実行パスまたはスレッドはアプリケーション全体で 1 つあるだけです。より複雑なアプリケーションの場合は、直列ではなく、並行して実行できる複数のタスクで構成されていることがあります。その際、タスクごとに個別のプロセスを起動することで並列処理を実現できますが、プロセスの起動には大量のリソースが必要です。そこで、スレッドを個別に起動することができます。これにより、リソースの消費を比較的抑えることができます。また、各スレッドは、プロセスに関連付けられた他のスレッドに依存することなく、その実行スケジュールを設定できます。

CPU が 1 基しか搭載されていないコンピューターであっても、スレッドによって、複雑なアプリケーションが CPU をより効率的に使用できるようになります。CPU が 1 基の場合、一度に実行できるスレッドは 1 つだけです。あるスレッドが、ディスクの読み書きなど、CPU を使用しない処理を長時間にわたって実行している場合、この処理が終了するまで他のスレッドを実行できます。処理の終了を待っている間に他のスレッドを実行できるようにすることで、アプリケーションは CPU を最大限に使用できます。データベース サーバーなど、ディスク I/O が多発するマルチユーザー アプリケーションの場合、特にそのことが当てはまります。複数のマイクロプロセッサまたは CPU が搭載されているコンピューターの場合、各 CPU が 1 つのスレッドを同時に実行できます。たとえば、CPU を 8 基搭載したコンピューターは同時に 8 個のスレッドを実行できます。

このセクションの内容