1. ホーム
  2. go

[解決済み] チャネルバッファサイズとは何ですか?

2023-01-29 01:53:03

質問

私は非同期チャネルを作成しようとしています。 http://golang.org/ref/spec#Making_slices_maps_and_channels .

c := make(chan int, 10)         // channel with a buffer size of 10

バッファサイズが10というのはどういう意味ですか?バッファサイズは具体的に何を表し、何を制限しているのでしょうか?

どのように解決するのですか?

バッファサイズは、送信をブロックすることなくチャネルに送信できる要素の数です。デフォルトでは、チャネルは 0 のバッファサイズを持っています (これは make(chan int) ). これは、すべての送信は他のゴルーチンがチャネルから受信するまでブロックされることを意味します。バッファサイズ1のチャネルは、送信ブロックが発生するまで1つの要素を保持することができるので、次のようになります。

c := make(chan int, 1)
c <- 1 // doesn't block
c <- 2 // blocks until another goroutine receives from the channel