カーネル レベル スレッド:切り替えはカーネルによって制御され、スレッドが切り替わると、ユーザー モードからカーネル モードに変換されます。切り替え後はカーネルモードからユーザーモードに戻す必要があり、smp、つまりマルチコアCPUを有効に活用することができます。 Windows スレッドは次のようになります。 (推奨学習: phpstorm)
ユーザー レベルのスレッド カーネルの切り替えは、ユーザー モード プログラム自体によって制御され、カーネルの介入を必要とせず、開始と終了の消費を削減します。マルチコア CPU を使用することで、これが Linux の pthread の現在一般的な使用方法です。
スレッドの実装は、ユーザー レベル スレッドとカーネル レベル スレッドの 2 つのカテゴリに分類でき、後者はカーネル サポート スレッドまたは軽量プロセスとも呼ばれます。マルチスレッド オペレーティング システムでは、システムごとに実装方法が異なり、ユーザー レベルのスレッドが実装されるシステムもあれば、カーネル レベルのスレッドが実装されるシステムもあります。
ユーザー スレッドは、カーネル サポートなしでユーザー プログラムに実装されたスレッドを指します。オペレーティング システムのコアには依存しません。アプリケーション プロセスは、スレッド ライブラリを使用して、作成、同期、スレッドのスケジューリングと管理、ユーザー スレッドを制御する機能。
ユーザー モード/カーネル モードの切り替えは必要なく、高速で、オペレーティング システムのカーネルはマルチスレッドの存在を認識しないため、1 つのスレッドをブロックするとプロセス全体 (そのすべてのスレッドを含む) が発生します。封鎖する。ここでのプロセッサ タイム スライスの割り当てはプロセスに基づいているため、各スレッドの実行時間は相対的に短縮されます。
カーネル スレッド: オペレーティング システム カーネルによって作成および破棄されます。カーネルは、プロセスとスレッドのコンテキスト情報とスレッドの切り替えを維持します。 I/O 操作によりカーネル スレッドがブロックされても、他のスレッドの操作には影響しません。 Windows NT および 2000/XP はカーネル スレッドをサポートします。
ユーザー スレッドは中間システムで実行されます。現在、中間システムを実装するには、ランタイム システムとカーネル制御スレッドという 2 つの方法があります。
「ランタイム システム」は、基本的に、スレッドの作成、キャンセル、スレッドの同期と通信の機能、スケジュール機能など、スレッドの管理と制御に使用される機能の集合です。これらの関数はユーザー空間に常駐し、ユーザー スレッドとカーネル間のインターフェイスとして機能します。
ユーザー スレッドはシステム コールを使用できません。代わりに、スレッドがシステム リソースを必要とする場合、リクエストがランタイムに送信され、ランタイムは対応するシステム コールを通じてシステム リソースを取得します。
カーネル制御スレッド: システムはプロセスに複数の軽量プロセス (LWP) を割り当てます。LWP はシステム コールを通じてカーネルが提供するサービスを取得でき、プロセス内のユーザー スレッドは多重化を通じて LWP に関連付けることができます。カーネルのサービスを取得するためです。
ユーザー レベルのスレッドとカーネル レベルのスレッドの違いは次のとおりです。
(1) カーネルでサポートされているスレッドは OS カーネルに認識されますが、ユーザー レベルのスレッドは OS カーネルに認識されます。 -レベルのスレッドは OS カーネル対応 Insensible です。
(2) ユーザーレベルのスレッドの作成、キャンセル、スケジュール設定は OS カーネルのサポートを必要とせず、言語 (Java など) レベルで処理されます。カーネルでサポートされるスレッドにはサポートが必要です。サポートは OS カーネルによって提供され、プロセスの作成、破棄、およびスケジューリングとほぼ同じです。
(3) ユーザーレベルのスレッドがシステムコール命令を実行すると、そのスレッドが属するプロセスが中断されますが、カーネルサポートスレッドがシステムコール命令を実行すると、中断されるだけです。中断されるスレッド。
(4) ユーザーレベルのスレッドのみを備えたシステムでは、CPU スケジューリングは依然としてプロセスに基づいています。実行中のプロセス内の複数のスレッドは、カーネル サポートがある場合、ローテーションで実行されるようにユーザー プログラムによって制御されます。スレッド システムでは、CPU のスケジューリングはスレッドに基づいており、OS のスレッド スケジューラがスレッドのスケジューリングを担当します。
(5) ユーザーレベルスレッドのプログラムエンティティはユーザーモードで実行されるプログラムですが、カーネルサポートスレッドのプログラムエンティティは任意の状態で実行できるプログラムです。
以上がカーネルレベルのスレッドの実行が高速化されるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。