Go 언어는 동시 프로그래밍을 핵심으로 하는 프로그래밍 언어이며 동시 작업을 처리하는 데 매우 효율적입니다. Go 언어의 표준 라이브러리에는 매우 유용한 동시성 도구인 WaitGroup이 있습니다. 이 기사에서는 WaitGroup의 사용법을 자세히 소개하고 예제를 통해 구체적인 응용 프로그램을 보여줍니다.
먼저 WaitGroup의 역할을 이해해야 합니다. WaitGroup은 후속 코드를 계속 실행하기 전에 동시 작업 그룹이 완료될 때까지 기다리는 데 사용됩니다. 일반적으로 기본 코루틴이 실행을 계속하기 전에 다른 코루틴이 특정 작업을 완료할 때까지 기다려야 할 때 WaitGroup을 사용할 수 있습니다.
Go 언어의 동기화 패키지에는 Add(), Done() 및 Wait()의 세 가지 주요 메소드가 있는 WaitGroup 구조가 있습니다. 아래에서는 그 기능을 하나씩 소개합니다.
첫 번째는 대기 작업 수를 늘리는 데 사용되는 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)를 한 번씩 호출하여 대기할 작업이 있음을 나타냅니다. 각 작업의 핸들러 함수에서는 작업이 완료된 후 wg.Done()을 한 번 호출합니다. 마지막으로 모든 작업이 완료될 때까지 기다리기 위해 기본 코루틴에서 wg.Wait()를 호출했습니다.
이 설계를 통해 우리는 작업을 동시에 처리할 수 있으며 모든 작업이 완료된 후에 메인 코루틴의 후속 실행을 계속할 수 있습니다. 마지막으로, 작업의 동시 처리와 결과의 정확성을 확인하기 위해 결과 목록을 인쇄했습니다.
요약하자면, WaitGroup은 Go 언어의 매우 실용적인 동시성 도구입니다. WaitGroup을 올바르게 사용하면 동시 작업을 더 잘 관리하고 작업의 순서와 정확성을 보장할 수 있습니다. 이 글이 독자들이 WaitGroup을 더 잘 이해하고 적용하는 데 도움이 되기를 바랍니다.
위 내용은 Go WaitGroup의 사용법과 예시에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!