go ルーチンがこのように動作するのはなぜですか?
Feb 08, 2024 pm 11:30 PMphpエディタのXiguaが「goルーチンの動作の理由」についての質問に答えます。 Go 言語のルーチン (ゴルーチン) は、同時実行の効果を実現できる軽量の同時実行メカニズムです。ただし、場合によっては、go ルーチンの動作により予期しない結果が生じる可能性があります。これは主に、go ルーチンのスケジューリング メカニズムとメモリ モデルの特性によるものです。 Go 言語の日常的な動作を深く理解する前に、これらの機能とそれがプログラムの動作に与える影響を理解する必要があります。
質問の内容
「Go in action」という本を読んでいますが、その本の goroutine の部分について少し混乱しています。基本的に、次のコードのもの:
リーリー出力は次のとおりです:
リーリー- なぜ最初にゴルーチン B を実行するのでしょうか?コードではゴルーチン A が最初にあるので、これも最初に実行する必要があります。
- ゴルーチン B は .Gosched メソッドを使用してゴルーチン A の実行を開始しますが、ミューテックスがロックされているため、ゴルーチン A はロックが解除されるまで待機します。このとき、GOMAXPROCS の論理プロセッサが 1 つだけになるように設定したのですが、2 つのゴルーチンが並列実行されているように見えるのはなぜですか?本当にこんなことが起こってよいのでしょうか?
先ほども述べたように、 gomaxprox を 1 に設定すると、一度に 1 つの Goroutine のみを実行できますが、この場合はそうではないようで、実際には両方の Goroutine が並行して実行されています。
解決策
Goroutine は同時に実行されます。これは、使用可能なプロセッサがある場合、スケジューラはそれらを並行して実行するようにスケジュールできることを意味します。使用可能なプロセッサが 1 つだけの場合でも、プロセッサは同時に実行されますが、常に 1 つの goroutine のみが実行されます。
Go ランタイムは、どの goroutine が最初に実行されるかについて保証しません。したがって、新しく作成されたゴルーチンのグループの実行順序はランダムです。
以上がgo ルーチンがこのように動作するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











golang でリフレクションを使用してプライベート フィールドとメソッドにアクセスする方法

Golang テクノロジーを使用して分散システムを設計する場合、どのような落とし穴に注意する必要がありますか?
