[go] waitgroup을 이용한 작업 완료 신호 처리

Go 언어에서 여러 고루틴이 작업을 완료했을 때 통합된 신호를 기다리고 처리하는 방법에 대해 이야기하겠습니다. 이를 위해 sync 패키지에 포함된 WaitGroup을 사용할 것입니다.

waitgroup이란?

WaitGroup은 고루틴이 완료될 때까지 기다리는 데 사용되는 동기화 도구입니다. Add, Done, Wait 메서드를 제공하여 여러 고루틴의 작업을 효율적으로 관리할 수 있습니다.

package main

import (
	"fmt"
	"sync"
	"time"
)

func main() {
	var wg sync.WaitGroup
	for i := 1; i <= 3; i++ {
		wg.Add(1)
		go worker(i, &wg)
	}
	wg.Wait()
	fmt.Println("모든 작업이 완료되었습니다")
}

func worker(id int, wg *sync.WaitGroup) {
	defer wg.Done()
	fmt.Printf("작업자 %d 시작\n", id)
	time.Sleep(time.Second * time.Duration(id))
	fmt.Printf("작업자 %d 완료\n", id)
}

위의 예제는 WaitGroup을 사용하여 3개의 고루틴을 생성하고 각각의 고루틴이 작업을 완료할 때까지 기다리며, 모든 작업이 완료된 후에 “모든 작업이 완료되었습니다”를 출력하는 간단한 프로그램입니다.

결론

WaitGroup은 고루틴의 동작을 효율적으로 동기화하는 데 유용한 도구입니다. 여러 고루틴이 병렬로 작업을 수행하고, 그 작업이 모두 완료된 후에 추가 작업을 수행해야 할 때 유용하게 사용할 수 있습니다.

이러한 점을 고려할 때, Go 언어에서 WaitGroup을 이용하여 고루틴의 작업 완료 신호를 처리하는 방법은 매우 중요하며, 효율적인 프로그래밍을 위해 반드시 알아두어야 하는 부분입니다.