github linkedin instagram email
JKT48 Dalam Go Concurrency
Jul 20, 2024
3 minutes read

JKT48 Dalam Go Concurrency

Prolog

Salah satu kekuatan dalam bahasa Go adalah kehandalan dan kemudahan-nya dalam menangani banyak aktivitas dalam sekali jalannya suatu fungsi. Lalu saya bertanya-tanya kapan sih saatnya menggunakan fasilitas go-concurrency itu dalam kehidupan sehari-hari ceilah :D. Soalnya ya tutorial-tutorial yang saya baca selama ini pembahasannya terlalu berat, sebagai contoh ada yang bikin contoh data-data besar yang rasa-rasanya terlalu formal untuk dibaca dengan rasa kantuk hehe :D. Nah dari situlah tercetus ide gimana kalo bikin kasus yang ringan-ringan ajah. Ya contohnya download foto member JKT-48 yang pastinya akan menarik hehe.

Pembahasan

Bagan JKT48 Go Concurremcy

Saya mau ajak teman-teman untuk menikmati tutorial ini dengan fun yakni download file foto member JKT-48 yang URL-nya sudah saya provide. Pada intinya saya mau download foto dari 3 folder yang di dalamnya terdapat puluhan foto termuat disana dengan secara bersamaan. Walau dalam bersamaan tapi saya mau memastikan 3 proses tadi selesai dan semua foto berhasil saya download. Untuk memastikan bahwa proses-nya selesai, maka ada sesuatu yang menunggu satu sama lain proses-proses yang terjadi. Selalu mulai dari yang simple.

Wait Group

Tentunya teman-teman pasti punya kuota-lah untuk cari tau apa itu wait group. Hehe bercanda ding :D. Ya simple -nya sih ini fasilitas di Go untuk menunggu proses concurrency satu sama lain.

Channel

Seperti halnya wait group, channel juga berfungsi untuk menunggu satu sama lain proses yang terjadi, tetapi bedanya, channel ini mempunyai fasilitas untuk saling ngabarin lewat pesan yang kita definisikan data type-nya.

Implementasi

Supaya ngga terlalu panjang mungkin temen-teman bisa langsung ke sini -> https://github.com/indraoct/go-concurrency. Jadi yang saya bahas disini mungkin snipet-snipetnya saja:

  1. WaitGroup

Program dijalankan, akan mendapati hasil berikut: Start1

Karena proses berjalan concurrently, maka start time terkesan hampir bersamaan, lalu diikuti proses secara silih berganti satu sama lain pada log dibawahnya. Lalu berikut ini adalah ending proses-nya

Ending dari folder Zee. End_Zee

Ending dari folder Magic Hour. End_MagicHour

Ending dari folder PonyTail (final). End_PonnyTail

Dari ke-3 ending tersebut, diketahui bahwa berakhirnya proses-proses tersebut tidak bersamaan. Karena ada script wg.Wait() tadi, sehingga proses keseluruhan aplikasi bisa ditahan sampe ke-3 proses tersebut terkonfirmasi selesai.

  1. Channel

Dalam contoh tersebut lihatlah part ch <- data disinilah letak proses pengabaran pesan oleh masing-masing proses bahwa “eh gue dah selesai yak donload folder x , loe gue end :D”. Nah script tadi melakukan blocking sesuai jumlah channel yang ter-produce.

End_channel

Dari end proses diatas menunjukkan bahwa pesan “Image downloaded /Users/indraoctama/Downloads/ponytail/ponytail_0151.png successfully!, count data /Users/indraoctama/Downloads/ponytail/ : 151 success” dikirim dari sub-proses iterateDownloadImages ke function main.

Kesimpulan

Kita telah sama-sama menyimak implementasi dan contoh penggunaan wait group, channel, go routine dengan cara yang mudah dipahami sebagai awalan. Bahwasanya artikel ini pastinya kurang dari kata sempurna, mungkin selanjutnya kita bisa lebih deep lagi dalam membaca pros dan cons wait group vs channel. Kapan pake salah satu dari tools tersebut dan sebagainya. Jika teman-teman ada komen boleh loh komen dibawah ini. Mari kita sama-sama belajar cheers :).



Back to posts


comments powered by Disqus