Go 言語は、同時プログラミングを中心としたプログラミング言語であり、同時タスクの処理において非常に効率的です。 Go 言語の標準ライブラリには、非常に便利な同時実行ツール WaitGroup があります。この記事では、WaitGroup の使用法を詳しく紹介し、例を通してその具体的なアプリケーションを示します。
まず第一に、WaitGroup の役割を理解する必要があります。 WaitGroup は、後続のコードの実行を続ける前に、同時タスクのグループが完了するのを待つために使用されます。通常、メイン コルーチンが実行を続行する前に他のコルーチンが特定のタスクを完了するのを待つ必要がある場合は、WaitGroup を使用できます。
Go 言語の同期パッケージの下には、Add()、Done()、および Wait() という 3 つの主要メソッドがある WaitGroup 構造があります。以下、それぞれの機能を一つずつ紹介していきます。
1 つ目は Add() メソッドで、待機中のタスクの数を増やすために使用されます。 Add() メソッドを呼び出すことで、完了まで待機する必要があるタスクの数を WaitGroup に通知できます。具体的な呼び出しメソッドは wg.Add(n) です。ここで、n は待機するタスクの数を表します。たとえば、完了を待っているタスクが 10 個ある場合、wg.Add(10) を呼び出すことができます。
次に、Done() メソッドがあります。これは、現在のタスクが完了したことをマークするために使用されます。各タスクが完了したら、Done() メソッドを呼び出して、現在のタスクが完了したことを WaitGroup に伝える必要があります。具体的な呼び出しメソッドは wg.Done() です。通常、タスクの完了後に Done() メソッドが確実に呼び出されるように、タスクの完了後に defer ステートメントで Done() メソッドを呼び出します。
最後は Wait() メソッドです。これは、すべてのタスクが完了するまでメイン コルーチンをブロックするために使用されます。メイン コルーチンが後続のコードの実行を続行する前に一連のタスクが完了するまで待機する必要がある場合、Wait() メソッドを呼び出すことができます。具体的な呼び出しメソッドは wg.Wait() です。 Wait() メソッドは、すべてのタスクが完了するまでブロックされます。
以下では、例を通じて WaitGroup の具体的なアプリケーションを示します。同時に処理する必要があるタスクのリストがあるとします。各タスクが完了したら、結果を結果リストに書き込みます。最後に、結果リストを印刷する前に、すべてのタスクが完了するまで待つ必要があります。コードは次のとおりです。
package main import ( "fmt" "sync" ) func main() { var wg sync.WaitGroup taskList := []string{"task1", "task2", "task3", "task4"} // 创建结果列表 resultList := make([]string, len(taskList)) // 遍历任务列表,开启多个协程处理任务 for i, task := range taskList { wg.Add(1) // 增加等待的任务数 go func(index int, task string) { defer wg.Done() // 标志任务已经完成 // 模拟任务处理过程 result := fmt.Sprintf("task %s processed", task) // 将结果写入结果列表 resultList[index] = result }(i, task) } wg.Wait() // 等待所有任务完成 // 打印结果列表 for _, result := range resultList { fmt.Println(result) } }
上記のコードでは、まず WaitGroup オブジェクト wg を作成します。次に、タスク リストを走査し、各タスクに対して wg.Add(1) を 1 回呼び出して、待機するタスクがあることを示します。各タスクのハンドラー関数では、タスクの完了後に wg.Done() を 1 回呼び出します。最後に、メイン コルーチンで wg.Wait() を呼び出して、すべてのタスクが完了するのを待ちました。
この設計により、タスクを同時に処理し、すべてのタスクが完了した後もメイン コルーチンの後続の実行を継続できるようになります。最後に、結果リストを出力して、タスクの同時処理と結果の正確さを検証しました。
要約すると、WaitGroup は Go 言語の非常に実用的な同時実行ツールです。 WaitGroup を適切に使用することで、同時タスクをより適切に管理し、タスクの順序と正確性を確保できます。この記事が読者の WaitGroup の理解と適用に役立つことを願っています。
以上がGo WaitGroupの使い方と使用例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。