많은 수의 동시 프로세스를 처리하는 Go 애플리케이션을 개발할 때 글로벌 카운터를 효과적으로 구현하는 것이 중요합니다. . 권장되는 접근 방식은 다음과 같습니다.
주요 목표가 간단한 카운터를 추적하는 것이라면 "동기화" 및 "동기화/원자" 패키지는 오류 없이 효율적인 솔루션을 제공합니다. 채널 오버헤드:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!