Memberantas Kesesatan Dalam Concurrency Design
Berawal dari kesesatan saya tentang konsep concurrency, saya melakukan tapa di gunung puntang, dan berakhir mendapatakan wahyu dari talk bapak Rob Pike.
Tulisan ini hanya hasil terjemahan pribadi terkait dari presentasi bapak rob pike tentang concurrency untuk sumbernya bisa di lihat di sini :
- video
- slide
Concurrency vs Parallelism
Concurrency adalah :
"Programming as the composition of independently execution process"
Proses yang di maksud adalah proses secara umum, bukan linux process
kalau di bahasa indonesia, concurrency adalah "cara memprogram yang tersusun dari proses eksekusi yang independent"
Parallelism adalah :
- "Programming as the simultaneous execution of (possibly related) computations."
kalau di bahasa indonesia, parallelism adalah "cara memprogram dimana eksekusi dari sebuah komputasi berjalan secara serentak (simultaneous), bisa saling terkait atau tidak "
kata bapak rop pike :
"Concurrency is about dealing with a lot of things at once"
"Parallelism is about doing a lot of things at once"
"Concurrency is about structure, parallelism is about execution."
"Concurrency provides a way to structure a solution to solve a problem that may(but not necessarily) be parallelizable"
Kalau kita bahasa indonesia :
"Konkurensi adalah tentang menangani banyak hal sekaligus"
"Paralelisme adalah melakukan banyak hal sekaligus" Yang membedakan dari ke-dua hal di atas adalah "menangani banyak hal" & "melakukan banyak hal" tetap persamanya adalah sama-sama dalam satu waktu. Jadi concurrency itu tentang struktur (menyusun), parallelism itu tentang eksekusi (pelaksanaan)
Jadi Concurrency itu menyediakan cara untuk menyusun sebuah solusi untuk menyelesaikan sebuah masalah yang bisa saja secara bersamaan (parallel) bisa juga tidak
Concurrency + communication
kata bapak C. A. R. Hoare di paper-nya yang berjudul "Communicating Sequential Processes (CACM 1978)" :
"concurrency is a way to structure a program by breaking it into pieces that can be executed independently"
"communication is the mean to coordinate the independent executions"
Agar concurrency bisa berfungsi kita membutuhkan communication, karena hasil dari pekerjaan yang di pecah ke dalam banyak bagian dan di kerjakan secara independen butuh di satukan, di sinilah communication di butuhkan untuk menyatukan hasil pekerjaan tersebut.
Simulasi Masalah
Berikut akan di gambarkan tentang masalah yang akan di selesaikan dengan concurrency & parallelizm
Single Gopher
- Disini kita melihat 1 gopher memindahkan tumpukan ke pembakaran, karena hanya ada satu gopher akan membutuhkan waktu yang sangat lama untuk menyelesaikanya
More gophers!
- lalu kita tambah 1 gopher lagi, jadi ada 2 gopher, tetapi ini tidak akan membantu, karena gopher yang kedua membutuhkan alat (keranjang) untuk memindahkan tumpukan ke pembakaran
More gophers and more carts
dengan begini, kita memberi 2 gopher keranjang akan mempercepat untuk menyelesaikan tumpukan pindah ke pembakaran
tetapi di sini kita punya masalah, kita harus melakukan sinkronisasi terhadap 2 gopher tersebut agar tidak saling berebut tumpukan, oleh karena itu kita butuh komunikasi
metode komunikasi nya dengan mengunakan
message
Double everything
dengan membagi tumpukan menjadi 2 kita menghindarkan gopher saling berebut tumpukan buku
eksekusi pasti akan menjadi jauh lebih cepat
di sini akan ada 2 buku yang pindahkan secara bersamaan, ini bisa kita sebut parallel
Concurrent composition
apakah penyelesaian masalah diatas benar parallel ? jawabnya, tergantung
bagaimana jika hanya satu gopher yang bergerak dalam satu waktu ? jawabnya, ini berjalan secara konkuren, tetapi tidak pararel
namun, masalah di atas bisa diparallelkan secara otomatis
setelah memahami solusi di atas coba kita gunakan model yang lain untuk menyelesaikan masalah di atas
Another design
ketiga gopher diatas, akan bekerjasama, tetapi bisa ada ada kemungkinan penundaan pekerjaan, karena gopher 2 harus mengembalikan keranjang kosong ke gohper 1
tetapi ke-3 gopher bisa menyatukan pekerjanya dengan koordinasi (komunikasi)
Finer-grained concurrency
sekarang kita tambahkan 1 gopher lagi yang pekerjanya hanya mengembalikan keranjang yang kosong
ke 4 gopher akan bekerja untuk solusi yang lebih baik, masing-masing melakukan satu tugas sederhana
jika kita mengatur ke 4 gopher melakukan pekerjaan dengan benar (tidak masuk akal tetapi bukan tidak mungkin), pekerjaan jadi 4x lebih cepat dari design awal
Observation
pada kasus di atas kita meningkatkan performance dengan menambahkan concurrent procedure
lebih banyak gopher yang melakukan pekerjaan, pekerjaan tersebut berjalan lebih baik
Concurrent procedures
Di atas ada 4 prosedur (pekerjaan) yang berbeda di lakukan oleh gopher
memuat buku kedalam keranjang
memindahkan keranjang ke tempat pembakaran
membongkar tumpukan dari keranjang untuk di masukan ke pembakaran
mengembalikan keranjang yang kosong
disini kita lihat masing-masing prosedur berjalan secara independent untuk menyelesaikan masalah di atas dan bisa saja Masing-masing tadi berjalan secara parallel
More parallelization!
disini kita akan membuat solusinya menjadi lebih parallel kita gandakan solusi sebelumnya sehingga menjadi 8 gopher
kesimpulanya ketika kita sudah memahami konsep concurrency dengan baik, kita bisa mengoptimalkan solusi tersebut dengan membuatnya menjadi parallel
Or maybe not parallelization at all
kita lihat gambar di atas, bisa saja kita tidak perlu menambahkan parallelism, bayangkan hanya ada 1 gopher yang melakukan semua pekerjaan diatas
tetapi tetap solusi di atas itu benar secara konsep concurrency
Another Design
di atas adalah design yang berbeda untuk solusi dari masalah sebelumnya
disini kita melihat ada sekumpulan gopher yang menumpuk buku untuk di consume oleh gopher yang lain agar bisa di bawa ke tempat pembakaran
cara ini juga benar secara concurrency
Lesson
jadi sebetulnya banyak cara untuk memecah proses
cara memecah proses itulah yang di sebut concurrent design
begitu kita berhasil memecah proses tersebut (concurrent desing) dan menjalankan secara parallel, ketika terjadi kegagalan pada parallelization, kita mudah untuk membetulkanya
Back to Computing
Pada masalah di atas, bisa kita ibaratkan sebagai berikut :
tumpukan buku => content web
gopher => CUP
keranjang => marshaling, rendering, atau networking
tempat pembakaran => proxy, browser, atau consumer dengan begini GO bisa menjadi solusi untuk concurrent desing pada web services yang skalabel untuk melayani web kontent
Subscribe to my newsletter
Read articles from oky saputra directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by