ホームページ >バックエンド開発 >Golang >Golang 関数が並列タスクを効率的に処理する方法

Golang 関数が並列タスクを効率的に処理する方法

王林
王林オリジナル
2024-04-19 10:36:011043ブラウズ

Go 関数での効率的な並列タスク処理: 同時ルーチンを起動するには go キーワードを使用します。 sync.WaitGroup を使用して、未処理のルーチンの数をカウントします。ルーチンが完了すると、wg.Done() が呼び出されてカウンターがデクリメントされます。メイン プログラムは、すべてのルーチンが完了するまで wg.Wait() の使用をブロックします。実際のケース: Web リクエストを同時に送信し、応答を収集します。

Golang 函数如何高效处理并行任务

Go 関数での効率的な並列タスク処理

Go 言語は強力な並列処理機能を提供し、開発者が簡単に作成して実行できるようにします。同時タスクを独立して実行できます。この記事では、Go 関数を使用して並列タスクを効率的に処理する方法について説明し、その使用法を示す実践的なケースを示します。

Go 関数の同時実行性

Go 関数には、同時実行をサポートする 2 つのキーワード gosync.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 未処理のルーチンの数。
  • Web リクエスト URL ごとに、同時 Go ルーチンを開始してリクエストを送信します。
  • ルーチンは wg.Done() を使用して、完了したことを示します。
  • メイン プログラムは wg.Wait() を使用して、すべてのルーチンが完了するまでブロックします。

この方法を使用すると、複数の Web リクエストを同時に送信し、各リクエストの応答を待たずにメイン プログラムの実行を続けることができます。

以上がGolang 関数が並列タスクを効率的に処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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