プロセスとスレッドの概要

プロセス は、プログラムの実行に必要なリソースを提供します。 プロセスには、仮想アドレス空間、実行可能コード、システム オブジェクトへのオープン ハンドル、セキュリティ コンテキスト、一意のプロセス識別子、環境変数、優先度クラス、最小および最大ワーキング セット サイズ、および少なくとも 1 つの実行スレッドがあります。 各プロセスは、 プライマリ スレッドと呼ばれる 1 つのスレッドで開始されますが、任意のスレッドから追加のスレッドを作成できます。

スレッドは、実行をスケジュールできるプロセス内のエンティティです。 プロセスのすべてのスレッドは、その仮想アドレス空間とシステム リソースを共有します。 さらに、各スレッドは、例外ハンドラー、スケジューリング優先度、スレッド ローカル ストレージ、一意のスレッド識別子、およびシステムがスケジュールされるまでスレッド コンテキストを保存するために使用する構造体のセットを保持します。 スレッド コンテキストには、スレッドのマシン レジスタのセット、カーネル スタック、スレッド環境ブロック、およびスレッドのプロセスのアドレス空間内のユーザー スタックが含まれます。 スレッドには独自のセキュリティ コンテキストを含めることもできます。これは、クライアントを偽装するために使用できます。

Microsoft Windows ではプリ エンプティブ マルチタスクがサポートされています。これにより、複数のプロセスから複数のスレッドを同時に実行する効果が生じます。 マルチプロセッサ コンピューターでは、コンピューター上のプロセッサと同じ数のスレッドを同時に実行できます。

ジョブ オブジェクトを使用すると、プロセスのグループを 1 つのユニットとして管理できます。 ジョブ オブジェクトは、それらに関連付けられているプロセスの属性を制御する、ナマブル、セキュリティ保護可能、共有可能なオブジェクトです。 ジョブ オブジェクトに対して実行される操作は、ジョブ オブジェクトに関連付けられているすべてのプロセスに影響します。

アプリケーションは スレッド プール を使用して、アプリケーション スレッドの数を減らし、ワーカー スレッドの管理を提供できます。 アプリケーションは、作業項目をキューに入れ、作業を待機可能なハンドルに関連付け、タイマーに基づいて自動的にキューに入れ、I/O とバインドすることができます。

ユーザー モード スケジューリング (UMS) は、アプリケーションが独自のスレッドをスケジュールするために使用できる軽量のメカニズムです。 アプリケーションは、 システム スケジューラ を使用せずにユーザー モードで UMS スレッドを切り替え、UMS スレッドがカーネルでブロックされた場合にプロセッサの制御を回復できます。 各 UMS スレッドには、1 つのスレッドのスレッド コンテキストを共有する代わりに、独自のスレッド コンテキストがあります。 ユーザー モードでスレッドを切り替える機能により、少数のシステム呼び出しを必要とする短時間の作業項目に対して、UMS の方がスレッド プールよりも効率的になります。

ファイバーは、アプリケーションによって手動でスケジュールする必要がある実行の単位です。 ファイバーは、それらをスケジュールするスレッドのコンテキストで実行されます。 各スレッドは、複数のファイバーをスケジュールできます。 一般に、ファイバーは、適切に設計されたマルチスレッド アプリケーションよりも利点を提供しません。 ただし、ファイバーを使用すると、独自のスレッドをスケジュールするように設計されたアプリケーションを移植しやすくなります。

詳細については、次のトピックを参照してください。