pemrograman

Mengenal Sync Once Pada Golang

Pengenalan sync.Once

Fitur ini pada Golang bisa kita gunakan untuk memasikan sebuah function dilakukan eksekusi hanya dalam satu kali saja. Kadang kalau kita sudah memiliki banyak goroutine yang sedang mengakses, maka dengan sync.Once ini bisa dipastikan hanya goroutine yang memiliki akses pertama yang bisa mengeksekusi function tersebut. Maka jika ada goroutine lain yang sedang berjalan tidak akan melakukan eksekusi dan menghiraukan fungsi tersebu.

Agar lebih jelas dan lebih bisa memahaminya kita langsung saja coba contoh program kodenya dibawah ini.

Implementasi dan sampel sync.Once

Pertama kali kita buat fungsi dan variable global yang nantinya akan kita update value dari variabel global tersebut seperti dibawah ini.

var count = 0

func OnlyOnce() {
	count++
}

Setelah itu, kita akan buat main programnya menggunakan sync.WaitGroup untuk menginisialisasi goroutine dengan jumlah 100 dan melakukan akses ke dalam fungsi yg diatas telah kita buat.

func main() {
	var once sync.Once
	var wg sync.WaitGroup

	for i := 0; i < 100; i++ {
		go func() {
			wg.Add(1)
			once.Do(OnlyOnce)
			wg.Done()
		}()
	}
	wg.Wait()
	fmt.Println(count)
}

Maka, bagaimana hasil dari output program atau kode kita yang diatas? Hasilnya akan mengeluarkan seperti ini

1

Padahal, proses untuk melakukan akses ke fungsi tersebut sebanyak 100 kali.

Kesimpulan

sync.Once bagi kita biasanya digunakan untuk mengisi data atau variabel yang memang cukup diakses satu kali dan sisanya bisa kita gunakan data tersebut untuk kebutuhan proses-proses yang lain yang saling terikat. Hal ini untuk mengurangi cost akses ke dalam fungsi tersebut dan response time yang lebih ringan.

comments powered by Disqus