目次
質問の内容
解決策
ホームページ バックエンド開発 Golang go ルーチンがこのように動作するのはなぜですか?

go ルーチンがこのように動作するのはなぜですか?

Feb 08, 2024 pm 11:30 PM
言語を移動

为什么 go 例程会有这样的行为?

phpエディタのXiguaが「goルーチンの動作の理由」についての質問に答えます。 Go 言語のルーチン (ゴルーチン) は、同時実行の効果を実現できる軽量の同時実行メカニズムです。ただし、場合によっては、go ルーチンの動作により予期しない結果が生じる可能性があります。これは主に、go ルーチンのスケジューリング メカニズムとメモリ モデルの特性によるものです。 Go 言語の日常的な動作を深く理解する前に、これらの機能とそれがプログラムの動作に与える影響を理解する必要があります。

質問の内容

「Go in action」という本を読んでいますが、その本の goroutine の部分について少し混乱しています。基本的に、次のコードのもの:

リーリー

出力は次のとおりです:

リーリー
  1. なぜ最初にゴルーチン B を実行するのでしょうか?コードではゴルーチン A が最初にあるので、これも最初に実行する必要があります。
  2. ゴルーチン B は .Gosched メソッドを使用してゴルーチン A の実行を開始しますが、ミューテックスがロックされているため、ゴルーチン A はロックが解除されるまで待機します。このとき、GOMAXPROCS の論理プロセッサが 1 つだけになるように設定したのですが、2 つのゴルーチンが並列実行されているように見えるのはなぜですか?本当にこんなことが起こってよいのでしょうか?

先ほども述べたように、 gomaxprox を 1 に設定すると、一度に 1 つの Goroutine のみを実行できますが、この場合はそうではないようで、実際には両方の Goroutine が並行して実行されています。

解決策

Goroutine は同時に実行されます。これは、使用可能なプロセッサがある場合、スケジューラはそれらを並行して実行するようにスケジュールできることを意味します。使用可能なプロセッサが 1 つだけの場合でも、プロセッサは同時に実行されますが、常に 1 つの goroutine のみが実行されます。

Go ランタイムは、どの goroutine が最初に実行されるかについて保証しません。したがって、新しく作成されたゴルーチンのグループの実行順序はランダムです。

以上がgo ルーチンがこのように動作するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

golang でリフレクションを使用してプライベート フィールドとメソッドにアクセスする方法 golang でリフレクションを使用してプライベート フィールドとメソッドにアクセスする方法 May 03, 2024 pm 12:15 PM

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

golang 関数で新しい関数を動的に作成するためのヒント golang 関数で新しい関数を動的に作成するためのヒント Apr 25, 2024 pm 02:39 PM

golang 関数で新しい関数を動的に作成するためのヒント

Go 言語でのパフォーマンス テストと単体テストの違い Go 言語でのパフォーマンス テストと単体テストの違い May 08, 2024 pm 03:09 PM

Go 言語でのパフォーマンス テストと単体テストの違い

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

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

機械学習で使用される Golang テクノロジー ライブラリとツール 機械学習で使用される Golang テクノロジー ライブラリとツール May 08, 2024 pm 09:42 PM

機械学習で使用される Golang テクノロジー ライブラリとツール

golang 関数の命名規則の進化 golang 関数の命名規則の進化 May 01, 2024 pm 03:24 PM

golang 関数の命名規則の進化

モバイルIoT開発におけるGolangテクノロジーの役割 モバイルIoT開発におけるGolangテクノロジーの役割 May 09, 2024 pm 03:51 PM

モバイルIoT開発におけるGolangテクノロジーの役割

golang 変数パラメータは関数の戻り値に使用できますか? golang 変数パラメータは関数の戻り値に使用できますか? Apr 29, 2024 am 11:33 AM

golang 変数パラメータは関数の戻り値に使用できますか?

See all articles