PHpullh
학습 라이브러리/Go/채널 파이프라인

GO · 고루틴/채널

채널 파이프라인

채널로 연결된 단계들이 동시에 실행되는 파이프라인 패턴입니다. 각 단계가 독립 고루틴에서 동작합니다.

고루틴/채널고급pipelinechannelgoroutinestreaming

핵심 설명

채널로 연결된 단계들이 동시에 실행되는 파이프라인 패턴입니다. 각 단계가 독립 고루틴에서 동작합니다.

Go code

package main

import "fmt"

func generate(nums ...int) <-chan int {
	out := make(chan int)
	go func() {
		defer close(out)
		for _, n := range nums { out <- n }
	}()
	return out
}

func square(in <-chan int) <-chan int {
	out := make(chan int)
	go func() {
		defer close(out)
		for n := range in { out <- n * n }
	}()
	return out
}

func filter(in <-chan int, pred func(int) bool) <-chan int {
	out := make(chan int)
	go func() {
		defer close(out)
		for n := range in {
			if pred(n) { out <- n }
		}
	}()
	return out
}

func main() {
	// 파이프라인: 생성 → 제곱 → 필터(50 이하)
	pipeline := filter(
		square(generate(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)),
		func(n int) bool { return n <= 50 },
	)

	for v := range pipeline {
		fmt.Println(v) // 1 4 9 16 25 36 49
	}
}

학습 팁

각 단계에서 defer close(out)를 사용하면 상류 단계가 완료될 때 하류로 자동 전파됩니다.

주의할 점

파이프라인에서 소비자가 조기 종료하면 생산자가 블로킹됩니다. context로 취소 신호를 전달하세요.

자주 묻는 질문

채널 파이프라인란 무엇인가요?

채널로 연결된 단계들이 동시에 실행되는 파이프라인 패턴입니다. 각 단계가 독립 고루틴에서 동작합니다.

채널 파이프라인 학습 시 주의할 점은 무엇인가요?

파이프라인에서 소비자가 조기 종료하면 생산자가 블로킹됩니다. context 로 취소 신호를 전달하세요.

Continue Learning

Go 학습을 이어가세요

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