코드 리뷰 목록
Go

Go 동시성 패턴 - Worker Pool

Go의 goroutine과 channel을 활용한 Worker Pool 패턴 구현입니다. 작업 큐와 결과 처리를 효율적으로 관리합니다.

C
choi_go
2025-03-17
1

// 코드

Go
45 lines
1package main
2
3import (
4    "fmt"
5    "sync"
6)
7
8type Job struct {
9    ID   int
10    Data interface{}
11}
12
13type Result struct {
14    JobID  int
15    Output interface{}
16    Err    error
17}
18
19func workerPool(numWorkers int, jobs <-chan Job, results chan<- Result) {
20    var wg sync.WaitGroup
21
22    for i := 0; i < numWorkers; i++ {
23        wg.Add(1)
24        go func(workerID int) {
25            defer wg.Done()
26            for job := range jobs {
27                result := processJob(job)
28                results <- result
29            }
30        }(i)
31    }
32
33    go func() {
34        wg.Wait()
35        close(results)
36    }()
37}
38
39func processJob(job Job) Result {
40    // 실제 작업 처리 로직
41    return Result{
42        JobID:  job.ID,
43        Output: fmt.Sprintf("processed job %d", job.ID),
44    }
45}

// 커뮤니티 리뷰1

Y
yoon_go
2025-03-17
5

Worker Pool 구현이 잘 되어 있습니다. 다만 `context.Context`를 추가하여 취소 시그널을 처리하면 더욱 견고한 코드가 됩니다.

// 리뷰 작성