[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