ChanX:Go 構建無限緩衝通道

chanx (github.com/smallnest/chanx) 一個用環形緩衝區(ringbuffer)實現的無界通道(unbounded channel)的 Go 語言庫。

它非常適合在需要異步處理、生產者快於消費者、或對標準通道容量受限(如 make(chan T, N))感到不滿足的場景中使用。

爲什麼需要 Unbounded Channel?Go 原生的 chan 是有限容量的:

參考社區中關於這個話題的幾個重要討論:

安裝

 go get -u github.com/smallnest/chanx

基本使用

 ctx, cancel := context.WithCancel(context.Background())
 defer cancel()

 ch := chanx.NewUnboundedChan[int](ctx, 100)

 go func() {
  for v := range 10 {
   ch.In <- v // send values
  }

  close(ch.In) // close In channel
 }()

 for v := range ch.Out { // read values
  fmt.Println(v)
 }

核心思想

chanx 實現了一個 “看起來是無界” 的 channel,本質上是: 加了一個 ringbuffer 緩衝區 + goroutine 異步調度,在生產快於消費時承接中間壓力,從而避免寫阻塞。


References
https://github.com/smallnest/chanx

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/EBuiL2Jx6UTC6EE_spQ6hw