Memahami sync.WaitGroup Pada Bahasa Golang

Subscribe Dengan Account Google Untuk Membaca Artikel Tanpa Iklan !
Memahami sync.WaitGroup Pada Bahasa Golang
Lenovo Yoga 7i 2in1 14IML9 0WID Intel Core Ultra 5

Lenovo Yoga 7i 2in1 14IML9 0WID Intel Core Ultra 5

Lenovo Yoga 7 2-in-1 14IML9 83DJ000WID ULTRA 5-125H/16GB/512GB/TS 14.0 OLED/WIN11+OHS2021/TIDAL TEAL - Yoga 7 2-in-1 14IML9 - Part Number : 83DJ000WID - PERFORMANCE: Processor Intel® Core™ Ultra 5 125H, 14C (4P + 8E + 2LPE) / 18T, Max Turbo up to 4.5GHz, 18MB - Graphics Integrated Intel® Arc™ Graphics - Chipset Intel® SoC Platform - Memory 16GB Soldered LPDDR5x-7467

Free Klik Disini !

Pada tutorial sebelumnya Anda telah belajar bagaimana cara mengambil pesan dari proses Goroutine dengan menggunakan Channel : Komunikasi goroutine dengan channel pada bahasa golang.

Go menyediakan package sync, berisi cukup banyak API untuk menangani masalah multiprocessing (goroutine), salah satunya  adalah menggunakan sync.WaitGroup.

Kegunaan sync.WaitGroup adalah untuk sinkronisasi goroutine. Berbeda dengan channel, sync.WaitGroup memang dirancang khusus untuk maintain goroutine, cara penggunaannya juga lebih mudah dan efektif dibanding channel.

sync.WaitGroup digunakan untuk menunggu goroutine, setelah Anda mendefinisikan variable sync.WaitGroup tambahkan parameter Add(int). Parameter ini berisi berapa banyak jumlah goroutine yang akan Anda eksekusi.

A) Contoh Kode Program


Perhatikan contoh kode berikut ini:

package main

import (
"fmt"
"runtime"
"strconv"
"sync"
)

func sampleWaitgroup1(wg *sync.WaitGroup, message int64) {
defer wg.Done()
fmt.Println(fmt.Sprintf("sample WG1: %d", message))
}
func sampleWaitgroup2(wg *sync.WaitGroup, message string) {
defer wg.Done()
fmt.Println(fmt.Sprintf("sample WG2: %s", message))
}
func sampleWaitgroup3(wg *sync.WaitGroup, message float64) {
defer wg.Done()
fmt.Println(fmt.Sprintf("sample WG3: %f", message))
}

func main() {
runtime.GOMAXPROCS(2)

var wg sync.WaitGroup
wg.Add(3)
go sampleWaitgroup1(&wg, 10000)
go sampleWaitgroup2(&wg, "test wg2")
go sampleWaitgroup3(&wg, 1111.11111)

wg.Wait()
}

Output:

sample sync await go sample sync await go

Jika Anda perhatikan kode diatas, Anda akan menemukan 3 fungsi yang di jalankan oleh goroutine.

Sebelum goroutine dijalankan terdapat variable wg dengan parameter Add(), paramater Add() bertipe integer yang di isi dengan jumlah goroutine yang akan dieksekusi.

B) Perbedaan WaitGroup Dengan Channel


Perbandingan bukan sebuah perbandingan yang valid, tapi jika dibandingkan maka perbedaan antara channel dan sync.WaitGroup kurang lebih sebagai berikut:

  • Channel tergantung kepada goroutine tertentu dalam penggunaannya, tidak seperti sync.WaitGroup yang dia tidak perlu tahu goroutine mana saja yang dijalankan, cukup tahu jumlah goroutine yang harus selesai

  • Penerapan sync.WaitGroup lebih mudah dibanding channel

  • Kegunaan utama channel adalah untuk komunikasi data antar goroutine. Sifatnya yang blocking bisa kita manfaatkan untuk mengatur goroutine; sedangkan WaitGroup khusus digunakan untuk sinkronisasi goroutine.

  • Performa sync.WaitGroup lebih baik dibanding channel meneurut beberapa developer.


Semoga dari bebrapa penjelasan diatas Anda bisa lebih memahami kegunaan sync.WaitGroup pada bahasa pemrograman golang.

Demo :

Baca artikel lainya :


Sumber referensi: yourbasic.org/golang/, novalagung.com, stackoverflow.com