在开发处理大量并发进程的 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中文网其他相关文章!