多数の同時プロセスを処理する 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 中国語 Web サイトの他の関連記事を参照してください。