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

WBOY
リリース: 2024-02-06 09:10:08
転載
819 人が閲覧しました

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 までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!