golang では、非同期とは、コードの順序に従わない実行を指します。非同期プロセスの実行には、元のシーケンスとの順序関係はなくなります。非同期では、非同期プロセスの呼び出しが行われると、発行された場合、呼び出し元は結果を取得する前に後続の操作を続行できます。 Golang の非同期は主にコルーチン (ゴルーチン) によって実装されており、ゴルーチンは関数の呼び出しに使用され、go キーワードで関数が呼び出されると、go がその関数を実行するコルーチンのようなものを作成することで簡単に同時実行を実現できます。
このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。
非同期 (async) は、同期 (Synchronous、sync) の反対の概念です。私たちが研究した従来のシングルスレッド プログラミングでは、プログラムの実行は同期です (同期とは、すべてのステップが同時に実行されることを意味するのではなく、ステップが制御フロー シーケンス内で順番に実行されることを意味します)。非同期の概念は同期を保証するものではなく、非同期処理の実行は元のシーケンスと順序関係を持たなくなります。
簡単に理解すると、同期はコードの順序で実行され、非同期実行はコードの順序ではなく、非同期実行の方が効率的です。
もう 1 つの説明は次のとおりです:
2 つのコンテナーがあり、1 つは同期と呼ばれ、もう 1 つは非同期と呼ばれ、実行されるコードは同期と非同期に分割されます。 . 、最初に同期を実行し、同時に非同期コンパイルを待ち、同期が完了した後に非同期コードを実行します。
Go の非同期は主にコルーチン (ゴルーチン) によって実装されます。スレッドと比較して、コルーチンは占有メモリが少なく軽量であり、これが Go のパフォーマンス上の利点でもあります。
Go 言語は並行プログラミング言語です。Go には非常に重要なキーワード go (ゴルーチン) があります。一般に、これを使用していくつかの非同期および並行タスクを実行できます。
Goroutine は関数の呼び出しに使用され、go キーワードで関数を呼び出すと、go がその関数を実行するコルーチンのようなものを作成し、簡単に同時実行を実現します。
例:
package main import ( "fmt" ) func main() { go work1() go work2() fmt.Println("[全部完成]") } func work1(){ fmt.Println("work1") } func work2(){ fmt.Println("work2") }
結果:
[全部完成]
もちろん、これは不適切な例ですが、work1、work2を呼び出した後に出力を待たずに非同期実行していることも証明しています。結果、実行は続行されました。
最終出力を実行する前に非同期実行が完了するのを待ちたい場合は、WaitGroupに参加する必要があります
正しい例:
package main import ( "fmt" "sync" ) var waitGroup sync.WaitGroup func main() { waitGroup.Add(2) go work1() go work2() waitGroup.Wait() fmt.Println("[全部完成]") } func work1(){ fmt.Println("work1") waitGroup.Done() } func work2(){ fmt.Println("work2") waitGroup.Done() }
結果:
work2 work1 [全部完成]
[関連する推奨事項:Go ビデオ チュートリアル 、プログラミング教育 ]
以上がGolang の非同期とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。