Golangのチャネルブロッキングの問題をどのように解決しますか?

Go言語では、チャネルのブロッキング問題は以下のように解決できます:

  1. 選択する
  2. 選択する (sentaku suru)
  3. 選択する
select {
case <-ch1:
    // 执行ch1通道的读操作
case <-ch2:
    // 执行ch2通道的读操作
default:
    // 所有通道都没有准备好
}
  1. 選択する
  2. 時間の経過
  3. 選択する
select {
case <-ch:
    // 执行ch通道的读操作
case <-time.After(time.Second):
    // 超时处理
}
  1. バッファ付きチャネルを使用すると、チャネルのバッファには一定数の要素を保存することができ、送信操作がバッファが満杯でない場合はすぐに実行され、ブロックされません。バッファが満杯の場合、送信操作は要素が読み取られるまでブロックされます。バッファ付きチャネルを使用することで、送信操作時にブロックされることを回避できます。
ch := make(chan int, 10) // 带有缓冲区大小为10的通道
ch <- 1 // 发送操作不会阻塞
  1. れん
  2. キャップ
  3. れん
  4. 帽子
if len(ch) < cap(ch) {
    ch <- 1
}

選択した方法は、特定のシーンやニーズに応じて適切なものです。

bannerAds