Dalam membangunkan aplikasi Go yang mengendalikan sejumlah besar proses serentak, menjadi penting untuk melaksanakan kaunter global dengan berkesan . Berikut ialah pendekatan yang disyorkan:
Jika matlamat utama adalah untuk menjejak pembilang mudah, pakej "penyegerakan" dan "penyegerakan/atomik" menyediakan penyelesaian yang cekap tanpa overhed saluran:
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)) }
Saluran menjadi bermanfaat apabila menyelaras pekerja dan mengagihkan tugas. Walau bagaimanapun, untuk operasi kaunter yang mudah, mereka mungkin memperkenalkan overhed yang tidak perlu:
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 } }
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Kaunter Global dengan Cekap dalam Aplikasi Serentak Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!