Home > Pemrograman Java, Sistem Operasi, Sistem Terdistribusi > Multithreading di Java (2)

Multithreading di Java (2)


Pemrograman multithreading tidak semudah pemrograman sederhana yang dipelajari tahun pertama atau kedua kuliah Informatika. Namun, mengapa multithreading masih digunakan? Di samping memang memberikan tantangan khusus, multithreading mempunyai beberapa keuntungan.

2. Keuntungan dari Multithreading

Pemrograman multithreading tidak semudah pemrograman sederhana yang dipelajari tahun pertama atau kedua kuliah Informatika. Namun, mengapa multithreading masih digunakan? Di samping memang memberikan tantangan khusus, multithreading mempunyai beberapa keuntungan, di antaranya adalah:

– Utilisasi atau pemanfaatan sumber daya yang lebih baik.
– Rancangan program yang lebih sederhana pada beberapa situasi
– Program menjadi lebih responsif

Pemanfaatan sumber daya lebih baik

Bayangkan suatu aplikasi yang membaca dan memroses file-file dari sistem file lokal. Katakanlah pembacaan file dari disk memerllukan waktu 5 detik dan mengolahnya selama 2 detik. Maka pemrosesan dua file memerlukan :
5 detik membaca file A
2 detik mengolah file A
5 detik membaca file B
2 detik mengolah file B
———————–
14 detik (total)

Ketika pembacaan file dari disk, kebanyakan waktu CPU habis untuk menunggu pembacaan data di disk. CPU cukup banyak idle (menganggur) selama waktu itu. CPU harusnya dapat mengerjakan sesuatu yang lain. Dengan mengubah urutan dari operasi, CPU dapat dimanfaatkan lebih baik. Perhatikan urutan operasi berikut:

5 detik membaca file A
5 detik membaca file B + 2 detik mengolah file A
2 detik mengolah file B
———————–
12 detik (total)

CPU menunggu file pertama dibaca. Kemudian CPU tersebut mulai membaca file kedua. Sambil file kedua dibaca, CPU mengolah file pertama. Ingat, selama menunggu file dibaca dari disk, CPU kebanyakan idle.
Secara umum, CPU dapat mengerjakan yang lain selama menunggu IO. Tidak hanya berlaku terhadap IO disk, dapat juga berupa IO jaringan, atau input dari pengguna melalui mouse atau keyboard. IO jaringan dan disk bisanya jauh lebih lambat daripada IO CPU dan memory.

Rancangan Progran Lebih Sederhana

Jika kita memrogram urutan pembacaan dan pemrosesan di atas dalam bentuk aplikasi singlethreaded, kita harus memelihara track dari kedua status baca dan proses dari setiap file. Gantinya kita dapat memulai dua thread yang masing-masing hanya membaca dan memroses suatu file tunggal. Setiap thread ini akan diblok selama menunggu pembacan file di disk. Selama menunggu, thread-thread lain dapat menggunakan CPU untuk memroses bagian-bagian dari file yang telah dibaca. Hasilnya adalah, bahwa disk tetap sibuk sepanjang waktu, membaca dari berbagai file dan melatakkannya ke dalam memory. Hasil ini diperoleh pada saat pemanfaatan yang lebih baik dari disk dan CPU. Juga akan lebih mudah untuk memrogram, karena setiap thread hanya harus memelihara track dari suatu file tunggal.

Program Lebih Responsif

Suatu tujuan umum lain dengan mengubah aplikasi single thread ke dalam aplikasi multi thread adalah untuk mendapatkan suatu aplikasi yang lebih responsif. Bayangkan suatu aplikasi server yang mendengar request yang masuk pada beberapa nomor port. Ketika suatu request diterima, ia menangani request tersebut dan kemudian kembali lagi untuk mendengarkan. Perulangan server demikian digambarkan sebagai berikut:

while(server berstatus aktif){
dengarkan request
proses request
}

Jika request tersebut membutuhkan waktu lama untuk proses, tidak ada client baru yang dapat mengirimkan request ke server selama durasi tersebut. Hanya selama server dalam kondisi mendengar (listening) request dapat diterima.

Suatu rancangan alternatif dapat berupa thread yang mendengar (listening thread) melewatkan thread ke suatu thread pekerja (worker thread), dan dengan segera kembali untuk mendengarkan. Thread pekerja akan memroses request tersebut dan mengirim suatu balasan ke client. Rancangan ini digambarkan sebagai berikut:

while(server berstatus aktif){
dengarkan request
serahkan request ke thread pekerja
}

Pada cara ini, thread server akan segera kembali pada listening. Jadi lebih banyak client dapat mengirimkan request ke server. Server telah menjadi lebih responsif.
Hal yang sama berlaku bagi aplikasi desktop. Jika anda meng-klik suatu tombol (button) yang memulai suatu tugas (task) panjang, dan thread yang mengeksekusi tugas tersebut adalah thread yang juga meng-update jendela (window), tombol, dan lain sebagainya maka aplikasi akan tampak tidak responsif selama eksekusi tugas tersebut. Bukankah tugas tersebut dapat diserahkan ke thread pekerja?. Selama thread pekerja sibuk dengan tugas tersebut, thread window bebas untuk merespon request-request pengguna lain. Pada saat thread pekerja selesai melaksanakan tugas, ia mengirim sinyal (memberitahu) ke thread window. Thread window kemudian dapat meng-update jendela-jendela aplikasi dengan hasil dari tugas tersebut. Program dengan rancangan thread pekerja seperti ini tampak lebih responsif kepada pengguna.

  1. 20 January 2011 at 12:45 am

    Thanks ya..
    infonya sangat berguna..
    visit my pleace pleasešŸ˜€

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: