Golang에서 동시에 여러 채널 읽기
Golang에서는 "any-to-one" 채널을 만드는 것이 가능합니다. 여러 고루틴이 동일한 채널에 동시에 쓸 수 있습니다. 이 기능을 구현하는 방법을 살펴보겠습니다.
한 가지 접근 방식은 여러 채널이 데이터를 수신할 때까지 기다릴 수 있는 select 문을 사용하는 것입니다.
<code class="go">func main() { // Create input channels c1 := make(chan int) c2 := make(chan int) // Create output channel out := make(chan int) // Start a goroutine that reads from both input channels and sums the received values go func(in1, in2 <-chan int, out chan<- int) { for { sum := 0 select { case sum = <-in1: sum += <-in2 case sum = <-in2: sum += <-in1 } out <- sum } }(c1, c2, out) }</code>
이 goroutine은 무한정 실행됩니다. 두 채널 모두에서 수신된 값의 합계를 출력 채널로 보냅니다. 고루틴을 종료하려면 두 입력 채널을 모두 닫는 것이 необходимо입니다.
대안으로 다음 코드를 사용할 수 있습니다.
<code class="go">func addnum(num1, num2, sum chan int) { done := make(chan bool) go func() { n1 := <-num1 done <- true // Signal completion of one channel read }() n2 := <-num2 // Read from the other channel <-done // Wait for the first read to complete sum <- n1 + n2 }</code>
이 함수는 별도의 "완료" 채널을 사용합니다. 한 채널을 성공적으로 읽었을 때 이를 알립니다. 그러나 이 접근 방식은 입력 채널에 쓰는 고루틴을 수정해야 하기 때문에 유연성이 떨어질 수 있습니다.
적절한 접근 방식은 애플리케이션의 특정 요구 사항에 따라 다릅니다. 어떤 방법을 선택하든 Golang의 동시성 기능은 여러 채널을 동시에 처리할 수 있는 강력한 도구를 제공합니다.
위 내용은 Golang의 여러 채널에서 동시 읽기를 어떻게 달성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!