[go] map을 활용한 동시성 작업의 예시
Go 언어는 동시성을 쉽게 다룰 수 있는 기능들을 많이 제공합니다. map을 활용하면 데이터를 안전하게 공유하면서 동시성 작업을 수행할 수 있습니다. 이 글에서는 Go에서 map을 활용하여 동시성을 다루는 예시를 살펴보겠습니다.
Map을 사용한 동시성 작업
package main
import (
"fmt"
"sync"
)
var data = map[string]string{
"1": "Data 1",
"2": "Data 2",
// ... 여러 데이터
}
func main() {
var wg sync.WaitGroup
var mu sync.Mutex
for key, value := range data {
wg.Add(1)
go func(k, v string) {
defer wg.Done()
mu.Lock()
// data를 안전하게 읽거나 쓰기
fmt.Println("Key:", k, "Value:", v)
mu.Unlock()
}(key, value)
}
wg.Wait()
}
위의 예시 코드에서는 sync.Mutex
를 사용하여 map에 안전하게 접근하고 있습니다. sync.WaitGroup
을 사용하여 고루틴이 모두 종료될 때까지 기다립니다.
이 예시는 간단한 데이터를 처리하는 것이므로 sync.Mutex
를 사용하여 데이터를 안전하게 처리하고 있지만, 대규모의 데이터나 더 복잡한 동시성 작업을 다루는 경우에는 고루틴 간의 동기화를 보다 신중히 고민해야 합니다.
결론
Go에서 map을 활용하여 동시성 작업을 수행하는 방법을 살펴봤습니다. Map을 활용하면 데이터를 안전하게 공유하면서 동시성을 다룰 수 있으나, 이에 따른 동기화 및 안전한 접근에 주의해야 합니다. 적절한 방법으로 동시성을 다루면서 안정적이고 효율적인 프로그램을 개발할 수 있습니다.
참고 자료: https://pkg.go.dev/sync