Go by Example: [24] Channel Buffering

Channel Buffering

기본적으로 채널은 버퍼를 사용하지 않습니다. (unbuffered) 이말은 특정값을 채널에 보낸 후(chan <-),
정상적으로 수신할때만(<- chan) 다른 메세지를 전송할 수 있다는 의미입니다.
이에반해, 버퍼채널(Buffered Channels)은 일정개수의 메세지를 받을때까지 대기한 후, 한꺼번에
메세지를 전송하는 구조입니다.

package main

import "fmt"

func main() {
    
    messages := make(chan string, 2)    // [1]
    
    messages <- "buffered"              // [2]
    messages <- "channel"
    
    fmt.Println(<-messages)             // [3]
    fmt.Println(<-messages)
}
  1. make()함수를 이용해서 2개의 문자열을 처리할 수 있는 버퍼 채널을 생성했습니다.
  2. 버퍼채널은 수신대기 없이 2개의 메세지를 처리할 수 있게 됩니다.
  3. 수신할때도 채널에서 2개의 메세지를 꺼내서 사용합니다.

실행하면 다음과 같습니다.

$ go run channel-buffering.go 
buffered
channel