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)
}
make()
함수를 이용해서 2개의 문자열을 처리할 수 있는 버퍼 채널을 생성했습니다.- 버퍼채널은 수신대기 없이 2개의 메세지를 처리할 수 있게 됩니다.
- 수신할때도 채널에서 2개의 메세지를 꺼내서 사용합니다.
실행하면 다음과 같습니다.
$ go run channel-buffering.go
buffered
channel