Suatu thread merupakan suatu alur instruksi yang di eksekusi. Program yang melakukan lebih dari satu alur instruksi biasa disebut melakukan multithreading.
Contoh, kita ingin membuat suatu aplikasi untuk meng-import file yang besar sementara memungkinkan user untuk menekan tombol “Batal”, seorang developer akan membuat thread tambahan untuk melakukan proses import. Dengan melakukan proses import di thread yang lain, aplikasi bisa menerima pesan pembatalan dari user daripada harus menyebabkan aplikasi menjadi “Not Responding” sampai proses upload selesai.
Suatu sistem operasi men-simulasikan beberapa thread melalui mekanisme yang disebut “time slicing”. Time Slicing adalah mekanisme dimana sistem operasi mengalihkan eksekusi dari satu thread (urutan instruksi) ke thread berikutnya sehingga proses eksekusi perintah secara terus menerus akan tetap berlanjut dengan cepat.
Efeknya hampir sama dengan efek dalam kabel fiber optic dari telepon, dimana kawat dari fiber optic mewakili processor dan setiap percakapan yang terjadi mewakili suatu thread. Satu (single-mode) kawat fiber optic telepon hanya bisa mengirimkan 1 sinyal pada sekali pakai, tetapi banyak orang bisa saling melakukan percakapan secara terus menerus. Channel-channel dalam fiber optic cukup cepat dalam melakukan pergantian antar percakapan. Hampir sama, setiap thread dari suatu proses multithread selalu berjalan terus menerus secara paralel dengan thread yang lain.
Suatu thread seringkali menunggu event-event yang berbeda, seperti operasi I/O, mengganti ke suatu thread yang berbeda menyebabkan lebih efisiennya proses eksekusi perintah, karena processor tidak perlu idle untuk menunggu sampai operasi selesai.
Tetapi, mengganti proses dari satu thread ke thread yang lain akan bisa menyebabkan “overhead”. Jika terlalu banyak thread, pengalihan overhead akan membanjiri bagian dari proses thread yang sedang di eksekusi, juga, sistem akan mulai berjalan lambat – mulai melakukan proses pergantian antar thread daripada menyelesaikan proses dari thread sebelumnya terlebih dahulu.
Yang baru mengenal programming-pun pasti pernah mendengar istilah multithreading sebelumnya, seringkali mengenai kerumitannya.
Pemrograman, betapapun, meninggalkan suatu kerumitan yang patut dipertimbangkan, tidak sebanyak seperti membuat aplikasi yang memiliki banyak thread.
Atomicity (Valensi)
Pikirkan suatu kode program yang melakukan proses transfer dari suatu rekening. Pertama, pastikan apakah dananya cukup, jika cukup, proses transfer terjadi. Jika sesudah mengecek dana, eksekusi diganti dengan thread untuk menghapus dana tersebut, maka akan menyebabkan proses transfer yang invalid ketika proses eksekusi kembali ke thread awal. Mengatur akses rekening sehingga hanya satu thread yang bisa mengakses rekening tersebut, dalam satu waktu akan memperbaiki masalah dan menjadikan transfer tersebut “atomic”.
Suatu operasi atomic adalah satu, yang mana menyelesaikan seluruh prosesnya sampai selesai, atau mengembalikan sistem ke kondisi awal. Operasi transfer pada bank pastinya merupakan suatu operasi atomic karena melibatkan 2 langkah. Dalam proses melakukan langkah-langkah tersebut, sangat mungkin kehilangan operasi atomicity jika thread yang lain melakukan modifikasi terhadap rekening sebelum proses transfer selesai.
Identifikasi dan implementasi atomicity merupakan salah satu kerumitan utama dalam pemrograman multithreading.
Kerumitannya bertambah karena secara umum statemen dalam C# tidak secara penuh memerlukan atomic. _Count++, sebagai contohnya, merupakan statemen dalam C#, tetapi diterjemahkan menjadi beberapa instruksi untuk processor.
1. Proses membaca data dalam Count.
2. Processor mengkalkulasikan nilai yang baru.
3. Nilai baru diberikan pada Count (walaupun ini mungkin bukan atomic).
Sesudah data diakses, tetapi sebelum nilai baru diberikan, thread yang lain mungkin akan memodifikasi nilai aslinya.
Deadlock
Untuk menghindari kondisi yang tidak diinginkan, bahasa pemrograman mendukung kemampuan untuk mengunci dan membatasi kode untuk dijalankan pada thread tertentu, umumnya satu. Tetapi, jika perintah penguncian dijalankan pada thread berbeda, suatu deadlock bisa terjadi, seperti thread menjadi berhenti, masing-masing menunggu yang lain untuk melepaskan penguncian.
Contohnya :
Pada poin ini, setiap thread menunggu thread lain sebelum memulai proses, jadi setiap thread dikunci, sehingga mengakibatkan deadlock secara keseluruhan dalam proses eksekusi kode yang dijalankan.
Masalah dari code yang tidak atomic atau menyebabkan deadlock adalah bahwa kode tersebut tergantung pada urutan terjadinya instruksi dalam processor pada beberapa thread.
Sekilas pemrograman multithreading memang agak susah dan rumit, semua tergantung bagaimana logika programmer dalam mengatasinya. Salam.
Wordpress merupakan ‘Open source blog publishing application’, aplikasi open source yang digunakan untuk mengatur blog. Aplikasi ini gratis alias ...
Cara ini sangat efektif mengingat banyaknya Sistem Operasi bajakan yang didistribusikan dalam format .ISO banyak beredar di internet. Pengguna ...
Setelah cukup lama melupakan .NET kali ini kita akan mencoba membuat suatu aplikasi sederhana yang terdiri dari proses-proses Create, Read, Update ...
Komponen “Menemukan” dari proses desain adalah tentang bagaimana kita bertemu dengan klien-klien kita dan menemukan apa yang mereka inginkan. In ...
Tidaklah mudah kita bisa mengenali seorang programmer yang baik (mampu). Pengalaman yang terdapat dalam CV hanya terbatas, karena seorang programm ...
Bagus bgt neh themenya... sugoooiii.. Mklum newbi
bro bgus kli
ciamik habis....... gan!!! thanx banget, semoga me
thaks yaaa gan sangat bermanfaat skali nih .......
pengen blajar banyak deh dengan admin idfreelance.
Ajax alasan blog C# Cara datang Desain Download Ebook font Gambar gratis Grunge HDR Icon idfreelance inspirasi intro JavaScript jquery Keamanan Key Klien Kreatif Mengenali menggunakan Multithreading Pemrograman Pernikahan Photoshop PHP Programmer rahasia Script Software sumber Theme Thread Tip trik Tutorial VB Vista website Wordpress
Daftar link sahabat...
-Berbagi Ilmu -Blog Ooyi -Bobby Rahman -Caraku-Caramu -Ferditya Nugraha -Hadyan Fariz -Hidrogroup -I Putu Gusti -IndoSourceCode -Interaktif Tutorial -Jafriyal Bule -Medan Gamer -PolizeIRC -Rey’s Blog -Tech Review -Wawan
wah…… mantaph negh blog nya.. dr awal Q udh jatuh cinta dg blog ini, keren sangat. sob, ada ebook C# bahasa indonesia gak ? kalau ada minta yach. butuh banget buku C# yg bhs.Indonesia..
kunjungan hangat.. kl sempet kunjung balik yach sob
teknologi…
[...]Proses Threading dalam Pemrograman | IDFreelance.net – Ajang Belajar Pemrograman dan Desain Web[...]…
[...] http://www.idfreelance.net/pemrograman/proses-threading-dalam-pemrograman/ Like this:LikeBe the first to like this post. [...]
msh belum bgt ngerti. klo contohny gmn y….
mks. nice blog
terlepas dr pemrograman yg bahasanya awam bagi saya. Templatenya kerren bangat Kang……jempol duo deh….
rumit banget ya