PHpullh
학습 라이브러리/Go/고루틴 풀링

GO · 성능

고루틴 풀링

고루틴 생성/소멸 비용을 줄이는 풀링 패턴. 워커 풀로 고루틴 수를 제한합니다.

성능고급goroutine-poolworkerconcurrencyresource

핵심 설명

고루틴 생성/소멸 비용을 줄이는 풀링 패턴. 워커 풀로 고루틴 수를 제한합니다.

Go code

package main

import (
	"fmt"
	"sync"
)

type Pool struct {
	tasks chan func()
	wg    sync.WaitGroup
}

func NewPool(workers int) *Pool {
	p := &Pool{tasks: make(chan func(), workers*2)}
	for i := 0; i < workers; i++ {
		p.wg.Add(1)
		go func() {
			defer p.wg.Done()
			for task := range p.tasks {
				task()
			}
		}()
	}
	return p
}

func (p *Pool) Submit(task func()) {
	p.tasks <- task
}

func (p *Pool) Close() {
	close(p.tasks)
	p.wg.Wait()
}

func main() {
	pool := NewPool(4) // 4개 워커

	var mu sync.Mutex
	results := make([]int, 0, 100)

	for i := 0; i < 100; i++ {
		n := i
		pool.Submit(func() {
			result := n * n
			mu.Lock()
			results = append(results, result)
			mu.Unlock()
		})
	}

	pool.Close()
	fmt.Printf("처리 완료: %d건\n", len(results))
}

학습 팁

Go의 고루틴은 매우 가볍지만(2-8KB 스택), 수십만 개가 동시에 실행되면 스케줄링 오버헤드가 커집니다. 풀링으로 제한하세요.

주의할 점

풀을 닫기 전에 모든 작업이 제출되었는지 확인하세요. CloseSubmit하면 패닉이 발생합니다.

자주 묻는 질문

고루틴 풀링란 무엇인가요?

고루틴 생성/소멸 비용을 줄이는 풀링 패턴. 워커 풀로 고루틴 수를 제한합니다.

고루틴 풀링 학습 시 주의할 점은 무엇인가요?

풀을 닫기 전에 모든 작업이 제출되었는지 확인하세요. Close 후 Submit 하면 패닉이 발생합니다.

Continue Learning

Go 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.