ホームページ >バックエンド開発 >Golang >Golang コンテキストの切り替え

Golang コンテキストの切り替え

WBOY
WBOY転載
2024-02-06 09:10:08847ブラウズ

Golang 上下文切换

#質問の内容

非常に基本的な質問があります。 オペレーティング システムのスケジューラ コンテキストは、カーネル レベルにマップされたユーザー レベルのスレッド間で切り替えることができますか?

ゴスケジューラがカーネル スレッド上で goroutine A をスケジュールすると仮定します。ここで、ゴルーチン A が sysblock 呼び出しを行います。最初にコンテキストを切り替えるのは、OS と go スケジューラのどちらでしょうか?


正解


Go スケジューラは、オペレーティング システム レベルのスレッドで再利用されるゴルーチンを管理します。 Go スケジューラは、Goroutine がブロッキング システム コールを行う場合など、OS スケジューラを介さずに、Goroutine 間のコンテキスト スイッチを効率的に実行できます。ただし、タイム スライシングなどの要因により、オペレーティング システムのスケジューラが独自に中断してコンテキストの切り替えを実行する可能性があることに注意することが重要です。したがって、コンテキスト スイッチの正確なタイミングとオペレーティング システム スケジューラの関与は、Go プログラムの観点からは正確に決定できない可能性があります。

### 参考文献: ###

golang ソース コードの proc.go

Go スケジューラ: 軽量同時実行言語の実装

以上がGolang コンテキストの切り替えの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
前の記事:平等と深い平等次の記事:平等と深い平等