「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > `runtime.gosched()`の前後のGOプログラム実行時のGO 1.5の影響

`runtime.gosched()`の前後のGOプログラム実行時のGO 1.5の影響

2025-04-14に投稿されました
ブラウズ:272

How Does `runtime.Gosched()` Impact Go Program Execution Before and After Go 1.5?

goschedがgoプログラムの実行にどのように影響するか

問題

1.5より前のgoバージョンで、runtime.gosched()が関与するコードが観察されるように観察されました。 i:= 0; I runtime.gosched():
func say(s string) {
    for i := 0; i  hello
世界
こんにちは
世界
こんにちは
世界
こんにちは
世界
hello 

output whod runtime.gosched():
func say(s string) {
    for i := 0; i  hello
こんにちは
こんにちは
こんにちは
hello 

説明
func say(s string) {
    for i := 0; i  in goバージョン1.5より前に、runtime.gosched()は、呼び出されたときに他のゴルチンのコントロールを明示的に生成しました。 GOプログラムはデフォルトで単一のOSスレッドで実行されている間、runtime.gosched()により、スケジューラはゴルチン間で実行を切り替えることができました。したがって、上記のコード例では、「world」出力は、runtime.gosched()が呼び出されたときにのみ表示されました。スケジューラが「世界」印刷ステートメントを実行しているゴルウチンに切り替えることができたためです。これにより、Goroutinesを実行するために複数のOSスレッドを作成する場合があります。ただし、先制的なマルチタスクシステムとは異なり、ゴルチンは他のゴルチンが実行できるように、まだ明示的に制御をもたらす必要があります。これは、GOがスケジューラに自発的にコントロールを降伏させる協調的なマルチタスクを使用するためです。 GomaxProcsが2に設定された上記の例に見られるように、これは予測不可能な出力パターンにつながる可能性があります。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3