Evans Jayden Jam Tangan PriaType pengait : Pin Buckle. Kedalaman Anti Air : 5ATM / 50 Meter (Bisa dipakai berenang, snorkling, dibawa mandi) Buy |
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.
package mainimport (
"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()
}
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.
sync.WaitGroup
kurang lebih sebagai berikut:sync.WaitGroup
yang dia tidak perlu tahu goroutine mana saja yang dijalankan, cukup tahu jumlah goroutine yang harus selesaisync.WaitGroup
lebih mudah dibanding channelsync.WaitGroup
lebih baik dibanding channel meneurut beberapa developer.Demo :