Pengertian Dasar
Worker pool adalah teknik manajemen goroutine dalam concurrent programming pada Go. Sejumlah worker dijalankan dan masing-masing memiliki tugas yang sama yaitu menyelesaikan sejumlah jobs. Dengan metode worker pool ini, maka penggunaan memory dan performansi program akan bisa optimal.
Implementasi Program
output:
> Send Job: 0
-> Send Job: 1
-> Send Job: 2
-> Send Job: 3
-> Send Job: 4
-> Send Job: 5
<- receive job : 0
<- receive job : 4
-> Send Job: 6
-> Send Job: 7
<- receive job : 5
-> Send Job: 8
<- receive job : 2
<- receive job : 3
-> Send Job: 9
-> Send Job: 10
<- receive job : 1
<- receive job : 9
^Csignal: interrupt
Pembahasan
Pada contoh program diatas kita akan melakukan cetak suatu nilai yang di-input. Method echoWorker
adalah fungsi yang nantinya akan mengambil nilai dari input lalu kita buat sleep beberapa milisecond, misalkan dalam waktu sleep tersebut kita seolah-olah melakukan proses yang lain.Sedangkan method producer
memberikan input nilai ke dalam channel
yang berurutan.
Saat kita jalankan program tersebut kita harus inisialisasi terlebih dahulu channel
input dan output-nya. kenapa kita menggunakan 2 variable? Jadi in
digunakan untuk mengeset input yang nanti akan diproses di worker sedangkan out
digunakan untuk menerima hasil dari proses worker tersebut agar diproses di tahap berikutnya.
Langkah pertama siapkan worker
menggunakan goroutine
, jumlah worker sesuaikan dengan kebutuhan, dalam program diatas kita gunakan 5 workers yang nantinya akan berjalan. Pada saat kita execute go producer(in)
maka channel in
pun tiap waktu terus terisi dengan iterasi yang terus-menerus jika kita tidak memberhentikan program.
Bisa kita lihat output dari program, karena pertama kali kita siapkan 5 workers, maka saat in
di set data maka ke-5 worker itu pun berjalan bersamaan dengan proses (waktu) yang berbeda-beda. Nah kenapa yang pertama kali diterima atau dicetak adalah job 0 dan job 4? Mungkin saja proses Job 0 dan job 4 memiliki waktu tunggu yang lebih kecil dibandingkan yang lain. Begitupun worker yang lain, siapa yang lebih dahulu selesai maka dia akan mengirim nilainya dan menampilkan nilainya secara langsung.
Kesimpulan
Worker pool ini jenis concurrent yang mudah digunakan untuk melakukan proses data yang sangat banyak dengan proses yang cepat. Misalkan, kita akan memindahkan data dari CSV ke dalam database, dan record-nya itu bisa sampai berjuta-juta maka worker pool ini bisa jadi pilihan yang pas untuk memproses data seperti itu.
Dengan proses yang cepat seperti itu, perlu diingat kita juga perlu mempertimbangkan jumlah worker yang sedang berjalan disesuaikan dengan kapasitas komputer/server yang nanti worker pool berjalan. Jangan sampai saat kita menjalankan program di komputer/server kita terjadi hang
karena CPU sampai 100%.