Go 関数での効率的な並列タスク処理: 同時ルーチンを起動するには go キーワードを使用します。 sync.WaitGroup を使用して、未処理のルーチンの数をカウントします。ルーチンが完了すると、wg.Done() が呼び出されてカウンターがデクリメントされます。メイン プログラムは、すべてのルーチンが完了するまで wg.Wait() の使用をブロックします。実際のケース: Web リクエストを同時に送信し、応答を収集します。
Go 関数での効率的な並列タスク処理
Go 言語は強力な並列処理機能を提供し、開発者が簡単に作成して実行できるようにします。同時タスクを独立して実行できます。この記事では、Go 関数を使用して並列タスクを効率的に処理する方法について説明し、その使用法を示す実践的なケースを示します。
Go 関数の同時実行性
Go 関数には、同時実行をサポートする 2 つのキーワード go
と sync.WaitGroup
が用意されています。 。 go
キーワードは同時 Go ルーチンを開始するために使用され、sync.WaitGroup
はすべてのルーチンが完了するのを待つために使用されます。
Wait Group
sync.WaitGroup
は、未処理のルーチンの数を追跡するために使用されるカウンターです。ルーチンが完了すると、wg.Done()
を呼び出してカウンターをデクリメントします。メイン プログラムは、wg.Wait()
メソッドを使用して、すべてのルーチンが完了するまでブロックできます。
実践的なケース: 同時 Web リクエスト
複数の Web リクエストを同時に送信し、応答を収集する必要があるシナリオを考えてみましょう。以下は、Go 関数を使用して効率的な同時タスク処理を行う方法を示すコードです:
package main import ( "fmt" "net/http" "sync" ) func main() { // 要发送的 Web 请求 URL urls := []string{"https://example.com", "https://example2.com", "https://example3.com"} // 创建等待组 var wg sync.WaitGroup for _, url := range urls { // 启动一个并发例程来发送 Web 请求 wg.Add(1) go func(url string) { // 发送 GET 请求 resp, err := http.Get(url) if err != nil { fmt.Printf("Error getting %s: %v\n", url, err) } else { fmt.Printf("Status code for %s: %d\n", url, resp.StatusCode) } // 例程完成,递减等待组计数 wg.Done() }(url) } // 等待所有例程完成 wg.Wait() }
上記のコード:
sync.WaitGroup
を使用して、 track 未処理のルーチンの数。 wg.Done()
を使用して、完了したことを示します。 wg.Wait()
を使用して、すべてのルーチンが完了するまでブロックします。 この方法を使用すると、複数の Web リクエストを同時に送信し、各リクエストの応答を待たずにメイン プログラムの実行を続けることができます。
以上がGolang 関数が並列タスクを効率的に処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。