Go の通信シーケンシャル メモリ モデルにより共有メモリの正確性が保証されるため、Go 関数は Goroutine と対話します。関数は次の方法でゴルーチンと対話できます。 チャネル: スレッド間通信パイプ。アトミック変数: スレッドセーフな変数。 sync パッケージ: コルーチン同期プリミティブを提供します。
#なぜ Go 関数は Goroutine と対話できるのでしょうか?
バックグラウンド
Go では、ゴルーチンは並列実行できる軽量のスレッドです。関数は、Go で編成されたコードの塊です。関数とゴルーチンが相互作用する機能は、Go の同時プログラミング モデルの中心です。
理由
Go 関数がゴルーチンと対話できる理由は、Go のメモリ モデルのためです。 Go メモリ モデルは Communicating Sequential Memory (CSM) と呼ばれるもので、並列環境であっても共有メモリの正確性を保証します。
CSM
CSM の重要な原則は次のとおりです:
対話方法
関数は次の方法で goroutine と対話できます:
#実践的なケース次は、関数が goroutine とどのように対話するかを示す例です:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
|
説明In この例では:
変数は共有メモリであり、関数
incrementCounter は
mu ミューテックスを使用してアクセスを同期しますそれに。
関数を並行して実行し、
counter 変数を安全に更新します。
は、すべてのゴルーチンが完了するのを待機するために使用され、カウントを出力する前にそれが最新であることを確認します。
以上がなぜ golang 関数は goroutine と対話できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。