#質問の内容
非常に基本的な質問があります。
オペレーティング システムのスケジューラ コンテキストは、カーネル レベルにマップされたユーザー レベルのスレッド間で切り替えることができますか?
ゴスケジューラがカーネル スレッド上で goroutine A をスケジュールすると仮定します。ここで、ゴルーチン A が sysblock 呼び出しを行います。最初にコンテキストを切り替えるのは、OS と go スケジューラのどちらでしょうか?
正解
Go スケジューラは、オペレーティング システム レベルのスレッドで再利用されるゴルーチンを管理します。 Go スケジューラは、Goroutine がブロッキング システム コールを行う場合など、OS スケジューラを介さずに、Goroutine 間のコンテキスト スイッチを効率的に実行できます。ただし、タイム スライシングなどの要因により、オペレーティング システムのスケジューラが独自に中断してコンテキストの切り替えを実行する可能性があることに注意することが重要です。したがって、コンテキスト スイッチの正確なタイミングとオペレーティング システム スケジューラの関与は、Go プログラムの観点からは正確に決定できない可能性があります。
### 参考文献: ###
golang ソース コードの proc.go
Go スケジューラ: 軽量同時実行言語の実装
以上がGolang コンテキストの切り替えの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。