実践プロジェクト: Go WaitGroup を使用して Golang の同時実行パフォーマンスを向上させる
要約:
今日のインターネット時代において、高い同時実行処理は無視できない問題になっています。各種システム開発における質問です。 Golang は効率的な同時実行をサポートするプログラミング言語として、豊富な同時プログラミング機能を備えています。この記事では、実際のプロジェクト シナリオを通じて、Go WaitGroup を使用して Golang の同時実行パフォーマンスを向上させる方法を紹介します。具体的なコード例を手がかりとして、読者は WaitGroup を使用して実際の戦闘での同時タスク処理を実装することができます。
キーワード:
Golang; 同時実行パフォーマンス; WaitGroup; 実践的な戦闘; コード例
3.1 WaitGroup の初期化
メイン スレッドで、最初に WaitGroup オブジェクトを初期化する必要があります。 WaitGroup オブジェクトは、Add メソッドを通じて待機中のタスクの数をカウントします。
var wg sync.WaitGroup
3.2 タスクの追加
同時タスクでは、特定のタスクを goroutine で実行する必要があり、タスクが完了すると、タスクは Done メソッドによって完了としてマークされます。
wg.Add(1) // 增加一个任务计数 go func() { defer wg.Done() // 标记任务完成 // 执行具体任务 }()
3.3 タスクの完了を待機しています
メインスレッドは、Wait メソッドを呼び出して、すべてのタスクが完了するのを待ちます。
wg.Wait()
package main import ( "fmt" "io/ioutil" "net/http" "sync" ) func main() { urls := []string{"https://www.example.com/1", "https://www.example.com/2", "https://www.example.com/3"} var wg sync.WaitGroup for _, url := range urls { wg.Add(1) go func(url string) { defer wg.Done() resp, err := http.Get(url) if err != nil { fmt.Printf("Failed to fetch %s: %v ", url, err) return } body, err := ioutil.ReadAll(resp.Body) resp.Body.Close() if err != nil { fmt.Printf("Failed to read response body from %s: %v ", url, err) return } err = ioutil.WriteFile("data/"+url, body, 0644) if err != nil { fmt.Printf("Failed to write file for %s: %v ", url, err) } }(url) } wg.Wait() fmt.Println("All tasks completed.") }
上記のサンプル コードでは、WaitGroup を使用して、複数の URL からデータをダウンロードする同時処理を実装します。 Add メソッドでタスク数を増やし、Done メソッドでタスクの完了をマークし、Wait メソッドですべてのタスクの実行が完了するのを待ちます。このようにして、並行タスクを効率的に処理できます。
参考:
【記事の文字数: 495】
以上がプロジェクトの実践: Go WaitGroup を使用して Golang の同時実行パフォーマンスを向上させるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。