Arti Concurrency dalam bahasa pemrograman



Pertanyaan sederhana, pertanyaan yang hampir selalu ditanyakan saat interview untuk posisi perekayasa perangkat lunak di beberapa startup di Indonesia.

Meski sederhana, banyak para perekayasa masih kesulitan menjelaskannya ini ketika ditanya. Bukan karena tidak tahu, banyak para perekayasa perangkat lunak mengerti ini secara kodingan, tetapi saat di interview, menjelaskannya cukup sulit, saya sering menemukan kandidat yang saya interview skillnya sangat bagus, learned skillsnya banyak.

Tetapi saat saya tanya, "Apa itu concurency? Apa itu Paralelisme? Coba sebutkan contoh sederhananya di kehidupan sehari-hari?"
Biasanya kandidat pasti kebingungan, dan berpikir lama. Mereka menjelaskan secara theory dan kodingan memang benar, tetapi saat ditanya contohnya dalam kehidupan sehari-hari pasti kewalahan.

Untuk saya sendiri, ketika mengikuti interview (yang di interview, bukan meng-interview), jawaban saya selalu beragam. Kadang tentang makan prasmanan, ngantri dsb, atau kadang tentang interview proses yang banyak dan ngantri. Yang pasti, concurency dan paralelisme selalu terjadi hanya disaat ada proses/kegiatan yang banyak.

Concurrency adalah kemampuan suatu program untuk menangani multiple order atau request. Oleh sebab itu, muncul proses yang diamakan Parallelism, yaitu kemampuan suatu program untuk menghandle lebih dari satu order/request secara bersamaan. Kita menggunakan analogi yang sama, yaitu pelayan restoran.

Paralelisme adalah bagaimana melakukan banyak pekerjaan dengan serentak. Dengan kata lain, eksekusi banyak perkerjaan secara bersama.

Dipertanyaan ini, saya akan kasih contoh sederhana untuk memberi gambaran apa itu concurency, dan apa bedanya dengan paralelisme.

Misal saya punya usaha, jualan Es Boba Cendol, terkenal sampe ke pelosok dunia, hehe. Saya buka warungnya di rumah, Es Boba Cendol Kang Iman Tumorang, aka EBC-KIT di baca: ibisi-kit! :D

Lalu, saya pun jualan, awalnya yang jualan saya sendiri. Prosesnya kira-kira begini

  1. - Pembeli datang, saya tanya mau pesan yang rasa apa, ada rasa coklat, jeruk, dsb.
  2. - Pembeli pun memilih, dan saya pun membuat cendolnya.
  3. - Saya siapin tempatnya, saya isi cendolnya sesuai pesanan, pake topping, dan segala jenisnya.
  4. - Lalu saya kasih ke pembelinya
  5. - Dan pembelinya memberi uangnya, bisa Cash, Gopay, Ovo, atau e-wallet lainnya.
  6. - Selesai.

Saya liat para pembeli sudah mulai bersungut sungut,
"kok lama banget sich!"
"panas banget lagi" dsb dsb..

Kalo dibiarkan begini, nanti kalau ada orang lain buka usaha sama di sebelah, bisa kena culik nih pembeli saya sama mereka, karna buat saya pengusaha, yang penting adalah cuan, dan pukul rata para kompetitor! :D

Lalu, saya pun mencari pekerja untuk membantu saya, saya pun menambah 3 orang lagi untuk membantu saya, melayani pembeli.

Jadi sekarang, kami jadi ada 4 orang melakukan semua proses yang sebelumnya saya sebut diatas. Nah disini, ketika kami ber-empat melakukan proses yang sama, secara bersamaan, kami sudah melakukan yang namanya "PARALELISME". Jadi pekerjaan yang serupa dikerjakan oleh 4 pekerja secara bersamaan.

Saya pun melihat proses ini, ternyata cukup mengurangi antrian yang sebelumnya 10KM, sekrang jadi 2.5KM, masing masing dibagi 4 antriannya.

Tetapi, kok ya, pelanggan tetap bersungut-sungut? Kok prosesnya tetap lama? Kami hanya mengurangi panjang antrian dan memecahnya menjadi 4 antrian saja, tetapi untuk proses pembuatannya kami masih memakan waktu yang sama. Sebut saja, untuk melayani satu pelanggan, kami menghabiskan waktu 15 menit.

Ini masih lama, saya ingin prosesnya cepat juga dong. Saya tidak masalah menambah pekerja lagi, tetapi saya ingin prosesnya cepat. Percuma kalo nambah 10 pekerja lagi, tetapi kalo setiap melayani pembeli membutuhkan waktu 15 menit per-orangnya di antrian.

Lalu saya pun coba lakukan eksperimen terhadap proses saya, saya kalkulasi waktu yang dibutuhkan dalam setiap proses tersebut.

  1. - #1 Pembeli datang, saya tanya mau pesan yang rasa apa, ada rasa coklat, jeruk, dsb.
  2. - #2 Pembeli pun memilih, dan saya pun membuat cendolnya.
  3. - #3 Saya siapin tempatnya, saya isi cendolnya sesuai pesanan, pake topping, dan segala jenisnya.
  4. - #4 Lalu saya kasih ke pembelinya
  5. - #5 Dan pembelinya memberi uangnya, bisa Cash, Gopay, Ovo, atau e-wallet lainnya.
  6. - #6 Selesai.

Proses #1 Butuh waktu minimal 5 menit, karna pembeli kadang milihnya lama banget.

Proses #2 dan #3 Butuh waktu minimal 5 menit, harus siapin tempat, isi es, cendol, topping, dsb.

Proses #4 dan #5, Butuh waktu minimal 5 menit, asumsi koneksi lancar ke Gopay, Ovo, tidak ada bug, atau uang tuker juga lengkap (kalo cash) pembeli usil bisa aja kasih uang 100 rebu padahal harga cendol cuma 3 rebu misalnya :D

Okay, setiap pekerja total butuh minimal 15 menit untuk melayani pembeli. Belum lagi kalau pembelinya anak-hitz, suka galau hanya milih menu pesanan, bukannya pas ngantri di pilihin!

Buat pelanggan, 15 menit per-antrian itu cukup membosankan. Karna jika per-orang dilayani 15 menit, kalo saya yang antri, terus ada 10 orang yang atri, ya saya juga bisa emosi, berdiri antri selama 2 jam?

Saya ingin pelanggan saya tetap ceria, dan saya ingin waktu antrian buat belinya dikurangin agar mereka masih tetap senyum saat belinya.

Lalu, saya pun ber-experimen,

Saya pun memisah prosesnya menjadi 3.

Pre/Ordering
Pembeli akan memilih menunya apa aja,
Lalu membayar langsung terserah pakai apa aja.
Lalu pembeli mendapat nomor pesanan.
Asumsi waktu dibutuhkan 5–10 menit.
Ordered
Pembeli yang sudah pesan saya suruh menunggu pesanannya selesai berdasarkan nomor pesanan ke meja/ruang tunggu.
Sehingga saya bisa melayani pembeli selanjutnya.
Asumsi waktu dibutuhkan 5 menit.
Completed
Pesanan datang, dan pembeli bisa minum es Cendolnya.
Jadi, saat saya menyuruh pembeli ke ruang tunggu untuk menunggu pesanannya, maka saya sudah melakukan "CONCURENCY". Sehingga waktu yang dihabiskan pelanggan untuk antri yang panjang jadi terpotong, minimal 5 menit.

Saya rangkum,

Saya menambah pekerja adalah Paralelisme
Saya menyuruh pembeli menunggu pesanannya selesai adalah Concurency
Jika disimpulkan dalam bahasa sederhana

Concurency: Melakukan banyak pekerjaan dalam waktu bersamaan
Paralelisme: Melakukan pekerjaan yang sama secara serempak, atau bersamaan.
Ketika saya menambah jumlah pekerja saya di warung Es cendol ibisi-kit! , kami melakukan pekerjaan yang sama secara serempak, maka itu adalah paralelisme, namun ketika saya menyuruh pembeli menunggu pesanan sementara saya melayani pembeli lain (ada 2 pekerjaan, menunggu pesanan, dan melayani pembeli lain) secara bersamaan, maka itu adalah concurency.

Dan, concurency bisa di gabung dengan parallelisme untuk pemprosesan yg lebih cepat. Untuk kasus diatas, sesudah concurencynya dilakukan, saya hanya tinggal menambah pekerja lain untuk menambah parallelisme nya.

Demikian, penjelasan panjangnya, semoga berguna buat yang membutuhkan hahaha.

Edit, updated!

Karena penjelasan saya diatas kurang menjelaskan ke bahasa pemrograman, saya tambahkan sedikit, intinya adalah, concurrency pada bahasa pemrograman adalah kemampuan bahasa pemrograman tersebut untuk melakukan banyak pekerjaan secara bersamaan, misal melakukan query ke database, atau melakukan API call ke system lain yang dilakukan secara bersamaan tanpa blocking satu sama lain.

Post a Comment

Previous Post Next Post