96

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

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

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

4

3 に答える 3

182

バッファサイズは、送信をブロックせずにチャネルに送信できる要素の数です。デフォルトでは、チャネルのバッファサイズは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
于 2012-08-13T23:52:42.620 に答える
18

次のコードは、バッファリングされていないチャネルのブロックを示しています。

// to see the diff, change 0 to 1
c := make(chan struct{}, 0)
go func() {
    time.Sleep(2 * time.Second)
    <-c
}()
start := time.Now()
c <- struct{}{} // block, if channel size is 0
elapsed := time.Since(start)
fmt.Printf("Elapsed: %v\n", elapsed)

ここでコードをいじることができます。

于 2016-10-07T14:18:54.600 に答える