ゴルーチン、ユーザー スレッド、カーネル スレッドの区別
はじめに
ゴルーチンの概念、ユーザー スレッド、およびカーネル スレッドは、探索するときに混乱を招く可能性があります。 Go の同時実行モデルの複雑さ。この記事は、これらの概念を明確にし、関連する質問に対処することを目的としています。
質問 1: OS スレッドとゴルーチンの定義
質問:
- 「Effective Go」の導入部分で goroutine について言及しています。 「OS スレッド」とは何を指しますか?ユーザー スレッドですか?
答え:
- 「OS スレッド」とは、カーネル スレッドを指します。
質問 2: 外出中の P と G を理解するスケジューラ
質問:
- なぜ P (プロセッサ/スケジューリング コンテキスト) の数は CPU コアの数と等しいのですか?
- すべての CPU が Go プログラムを処理している場合、CPU を必要とする OS 内の他のプログラムはどうなりますか割り当て?
答え:
- P は、ゴルーチンとカーネル スレッド間のマッピング層として機能します。カーネル スレッドごとに 1 つの P があります。
- Go プログラムはデフォルトで利用可能なすべての CPU コアを割り当てることができます (GOMAXPROCS)。ただし、これによって他の OS プロセスの実行が妨げられることはありません。同時操作であっても、プロセスは I/O 操作の待機にかなりの時間を費やすため、カーネル スケジューラーは CPU 時間を他のプログラムに割り当てることができます。
質問 3: カーネル スレッドの数生成された
質問:
- OS によって生成されるカーネル スレッドの数system?
答え:
- OS によって作成されるカーネル スレッドの数は動的であり、システムの負荷によって異なります。
以上がゴルーチン、ユーザー スレッド、カーネル スレッド: 違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。