在開發處理大量並發進程的Go 應用程式時,有效實現全域計數器變得至關重要。以下是建議的方法:
如果主要目標是追蹤簡單的計數器,「sync」和「sync/atomic」套件提供有效的解決方案,而無需通道開銷:
import "sync/atomic" type count32 int32 func (c *count32) inc() int32 { return atomic.AddInt32((*int32)(c), 1) } func (c *count32) get() int32 { return atomic.LoadInt32((*int32)(c)) }
當以下情況時通道變得有益協調工人並分配任務。然而,對於簡單的計數器操作,它們可能會引入不必要的開銷:
var work_chan chan int // make() called somewhere else (buffered) // started somewhere else func GoCounterRoutine() { for { select { case c := <-work_chan: work_counter += c break } } } func GoWorkerRoutine() { for { // do work work_chan <- 1 } }
以上是如何在並發Go應用中高效實現全域計數器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!