Dans le développement d'applications Go qui gèrent un grand nombre de processus simultanés, il devient crucial d'implémenter efficacement des compteurs globaux . Voici les approches recommandées :
Si l'objectif principal est de suivre un simple compteur, les packages "sync" et "sync/atomic" fournissent des solutions efficaces sans le surcharge des canaux :
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)) }
Les canaux deviennent bénéfiques lors de la coordination des travailleurs et de la distribution tâches. Cependant, pour des opérations de compteur simples, elles peuvent introduire une surcharge inutile :
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 } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!