Thread Safe dan Non-Thread Safe Code, Apa Maksudnya? oleh - jasabacklink.uno
Halo sahabat selamat datang di website jasabacklink.uno, pada kesempatan hari ini kita akan membahas seputar Thread Safe dan Non-Thread Safe Code, Apa Maksudnya? oleh - jasabacklink.uno, kami sudah mempersiapkan artikel tersebut dengan informatif dan akurat, silahkan membaca
Beberapa buku atau artikel yang pernah saya baca kadang menyebut-nyebut istilah thread safe. Konteksnya biasanya seperti ini âKode program ini thread safeâ, âQueue
di Ruby sifatnya thread-safeâ. Kebalikannya, ada juga yang menyematkan istilah non-thread safe di tulisannya.
Sebenarnya maksud dari thread safe dan non-thread safe itu apa?
Saatnya jujur, kita sebagai developer tidak jarang tidak paham dengan hal-hal yang sifatnya fundamental karena memang di kerjaan sudah dibantu dengan abstraksi. Thread contohnya, yakinkah kamu paham dengan apa yang dimaksud thread? Lalu apa itu multithreading? Dan bagaimana cara menulis kode program di bahasa yang biasa kita pakai supaya bisa multithreading?
Jujur-jujuran saja, saya termasuk programmer yang ignorant terhadap hal-hal dasar seperti ini. Satu pertanyaan, pernahkah kamu nulis kode program di production dengan menggunakan konsep multithreading? Kalau pakai Java berarti bikin kelas yang extend Thread
atau implement Runnable
, kalau di Ruby berarti pakai kelas Thread
. Saya yakin ada tapi jarang. Urusan aplikasi web yang bisa menangani concurrent request sudah diurus oleh application server.
Baru-baru ini saja saya tiba-tiba pengen untuk belajar hal-hal yang fundamental seperti thread, terutama di Ruby.
Kembali ke pertanyaan awal, thread safe dan non-thread safe itu maksudnya apa?
Simak penjelasannya lewat tulisan ini. Penjelasan yang saya tulis ini adalah suatu penjelasan yang saya impi-impikan ada dari dulu dan saya baca supaya paham thread safe, non-thread safe di masa awal jadi programmer.
Multithread
Pembicaraan thread safe muncul ketika kita berbicara tentang kode program yang jalan secara concurrent karena sengaja kita buat seperti itu dengan multithread.
Secara sederhana thread safe code itu maksudnya kode yang kita tulis yang berjalan secara concurrent karena dibuat multithread bisa berjalan sebagai mana mestinya.
Non-thread safe tinggal kebalikannya. Berarti kodenya kalau dijalankan di multithread environment akan menghasilkan sesuatu yang berada di luar ekspektasi kita alias nge-bug.
Penjelasan seperti di atas saya rasa hanya sedikit membuka wawasan. Momen eureka-nya baru didapat kalau sudah lihat contoh kode program. Jadi mari saya tunjukkan.
Non-Thread Safe
PERHATIAN : Kode yang saya tulis di blogpost ini dijalankan dengan menggunakan JRuby, bukan Ruby biasa yang sebagaimana umumnya disebut Ruby.
Perhatikan kode di bawah ini.
1 2 3 4 5 6 7 8 9 10 11 | shared_array = []  10.times.map do   Thread.new do     1000.times do |i|       shared_array << "I'm engineer"     end   end end.each(&:join)  puts shared_array.size |
Kode di atas membuat 10 buah thread dimana untuk masing-masing thread melakukan 1000x proses menambahkan string Iâm engineer ke dalam array.
Di bagian akhir ditampilkan jumlah elemen yang dimiliki oleh array. Berapa seharusnya jumlahnya? Gampang : 10 * 10_00 = 10_000
Berikut hasil yang saya dapatkan
Wait, what?
Itu lah yang dinamakan non-thread safe. Ekspektasi kita adalah 10_000 tetapi kenyatannya hasilnya tidak selalu 10_000 dan ini berbahaya.
Kenapa bisa seperti itu? Karena proses memasukkan 10_000 string ke array berjalan secara concurrent maka ada kejadian dimana proses memasukan string Iâm engineer terjadi secara bersamaan (istilah kerennya race condition) dan karena array di Ruby itu sendiri sifatnya non-thread safe.
Thread Safe
Kode di bawah ini adalah versi yang thread safe dari kode sebelumnya. Hanya mengganti dari array menjadi Queue
. For your information, Queue
merupakan satu-satunya struktur data di Ruby yang thread safe.
1 2 3 4 5 6 7 8 9 10 11 | shared_array = Queue.new  10.times.map do   Thread.new do     1000.times do |i|       shared_array << "I'm engineer"     end   end end.each(&:join)  puts shared_array.size |
Dijalankan berkali-kali menggunakan JRuby hasilnya selalu 10_000.
Pertanyaan-Pertanyaan Lain
Cukup banyak pertanyaan yang bisa muncul dari tulisan ini. Kita sebut saja yang pertama, kenapa pakai JRuby dan bukan Ruby biasa? Lalu bagaimana kalau kita ingin tetap pakai array tapi tetap thread safe? Ada juga multithreading itu paralel atau concurrent? Dan nyambung ke apa bedanya paralel dengan concurrent?
Itulah tadi informasi dari judi poker mengenai Thread Safe dan Non-Thread Safe Code, Apa Maksudnya? oleh - jasabacklink.uno dan sekianlah artikel dari kami jasabacklink.uno, sampai jumpa di postingan berikutnya. selamat membaca.
Post a Comment
0 Comments