author Ihsan Arif | 3 minutes

Implementasi Concurrency Worker Pool Golang

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%.

comments powered by Disqus