THREAD
Thread adalah
sebuah alur kontrol dari sebuah proses. Suatu proses yang multithreaded
mengandung beberapa perbedaan alur kontrol dengan ruang alamat yang sama.
Keuntungan dari multithreaded meliputi peningkatan respon dari user, pembagian
sumber daya proses, ekonomis, dan kemampuan untuk mengambil keuntungan dari
arsitektur multiprosesor. User level thread adalah thread yang tampak oleh
programmer dan tidak diketahui oleh kernel. User level thread secara tipikal
dikelola oleh sebuah library thread di ruang
user. Kernel level thread didukung dan dikelola oleh kernel sistem operasi.
Secara umum, user level thread lebih cepat dalam pembuatan dan pengelolaan dari
pada kernel thread. Ada tiga perbedaan tipe dari model yang berhubungan dengan
user dan kernel thread.
KONSEP DASAR
Thread saling berbagi bagian
program, bagian data dan sumber daya sistem operasi dengan thread lain yang
mengacu pada proses yang sama. Thread terdiri atas ID thread, program counter,
himpunan register, dan stack. Dengan banyak kontrol thread proses dapat
melakukan lebih dari satu pekerjaan pada waktu yang sama.
KEUNTUNGAN
- Tanggap: Multithreading mengizinkan program untuk berjalan terus walau pun pada bagian program tersebut di block atau sedang dalam keadaan menjalankan operasi yang lama/ panjang. Sebagai contoh, multithread web browser dapat mengizinkan pengguna berinteraksi dengan suatu thread ketika suatu gambar sedang diload oleh thread yang lain.
- Pembagian sumber daya: Secara default, thread membagi memori dan sumber daya dari proses. Keuntungan dari pembagian kode adalah aplikasi mempunyai perbedaan aktifitas thread dengan alokasi memori yang sama.
- Ekonomis: Mengalokasikan memori dan sumber daya untuk membuat proses adalah sangat mahal. Alternatifnya, karena thread membagi sumber daya dari proses, ini lebih ekonomis untuk membuat threads.
- Pemberdayaan arsitektur multiprosesor: Keuntungann dari multithreading dapat ditingkatkan dengan arsitektur multiprosesor, dimana setiap thread dapat jalan secara parallel pada prosesor yang berbeda. Pada arsitektur prosesor tunggal, CPU biasanya berpindah-pindah antara setiap thread dengan cepat, sehingga terdapat ilusi paralelisme, tetapi pada kenyataannya hanya satu thread yang berjalan di setiap waktu.
Dalam sub bab sebelumnya telah dibahas pengertian dari thread,
keuntungannya, tingkatan atau levelnya seperti pengguna dan kernel. Maka dalam
sub-bab ini pembahasan akan dilanjutkan dengan jenis-jenis thread tersebut dan
contohnya baik pada Solaris mau pun Java.
Sistem-sistem
yang ada sekarang sudah banyak yang bisa mendukung untuk kedua pengguna dan
kernel thread, sehingga model-model multithreading-nya pun menjadi beragam.
Implementasi multithreading yang umum akan kita bahas ada tiga, yaitu model
many-to-one, one-to-one, dan many-to-many.
Model Many to One
Model
many-to-one ini memetakan beberapa tingkatan pengguna thread hanya ke satu buah
kernel thread. Managemen proses thread dilakukan oleh (di ruang) pengguna,
sehingga menjadi efisien, tetapi apabila sebuah thread melakukan sebuah
pemblokingan terhadap sistem pemanggilan, maka seluruh proses akan berhenti
(blocked). Kelemahan dari model ini adalah multihreads tidak dapat berjalan
atau bekerja secara paralel di dalam multiprosesor dikarenakan hanya satu
thread saja yang bisa mengakses kernel dalam suatu waktu.
Model One to One
Model one-to-one memetakan setiap thread pengguna ke dalam satu kernel thread. Hal ini membuat model one-to-one lebih sinkron daripada model many-to-one dengan mengizinkan thread lain untuk berjalan ketika suatu thread membuat pemblokingan terhadap sistem pemanggilan; hal ini juga mengizinkan multiple thread untuk berjalan secara parallel dalam multiprosesor. Kelemahan model ini adalah dalam pembuatan thread pengguna dibutuhkan pembuatan korespondensi thread pengguna. Karena dalam proses pembuatan kernel thread dapat mempengaruhi kinerja dari aplikasi maka kebanyakan dari implementasi model ini membatasi jumlah thread yang didukung oleh sistem. Model one-to-one diimplementasikan oleh Windows NT dan OS/2.
Model one-to-one memetakan setiap thread pengguna ke dalam satu kernel thread. Hal ini membuat model one-to-one lebih sinkron daripada model many-to-one dengan mengizinkan thread lain untuk berjalan ketika suatu thread membuat pemblokingan terhadap sistem pemanggilan; hal ini juga mengizinkan multiple thread untuk berjalan secara parallel dalam multiprosesor. Kelemahan model ini adalah dalam pembuatan thread pengguna dibutuhkan pembuatan korespondensi thread pengguna. Karena dalam proses pembuatan kernel thread dapat mempengaruhi kinerja dari aplikasi maka kebanyakan dari implementasi model ini membatasi jumlah thread yang didukung oleh sistem. Model one-to-one diimplementasikan oleh Windows NT dan OS/2.
THREAD POOLS
Pada web server yang multithreading ada 2 masalah yang timbul :
Pada web server yang multithreading ada 2 masalah yang timbul :
- Ukuran waktu yang diperlukan untuk menciptakan thread untuk melayani permintaan yang diajukan terlebih pada kenyataannya thread dibuang ketika ia seketika sesudah ia menyelesaikan tugasnya.
- Pembuatan thread yang tidak terbatas jumlahnya dapat menurunkan performa dari sistem.
Solusinya adalah dengan penggunaan Thread Pools, cara
kerjanya adalah dengan membuat beberapa thread pada proses startup dan
menempatkan mereka ke pools , dimana mereka duduk diam dan menunggu untuk
bekerja. Jadi ketika server menerima permintaan maka maka ia akan membangunkan
thread dari pool dan jika threadnya tersedia maka permintaan tersebut akan
dilayani. Ketika thread sudah selesai mengerjakan tugasnya maka ia kembali ke
pool dan menunggu pekerjaan lainnya. Bila tidak thread yang tersedia pada saat
dibutuhkan maka server menunggu sampai ada 1 thread yang bebas. Keuntungan
thread pool :
- Biasanya lebih cepat untuk melayani permintaan dengan thread yang ada dibanding dengan menunggu thread baru dibuat.
- Thread pool membatasi jumlah thread yang ada pada suatu waktu. Hal ini pentingpada sistem yang tidak bisa mendukung banyak thread yang berjalan secara concurrent .
Jumlah thread dalam pool bisa
tergantung dari jumlah CPU dalam sistem, jumlah memori fisik, dan jumlah permintaan
klien yang concurrent.
THREAD LINUX
Ketika
pertama kali dikembangkan, Linux tidak didukung dengan threading di dalam
kernelnya, tetapi dia mendukung proses-proses sebagai entitas yang dapat
dijadwalkan melalui clone() system calls. Sekarang Linux mendukung
penduplikasian proses menggunakan system call clone() dan fork(). Clone()
mempunyai sifat mirip dengan fork(), kecuali dalam hal pembuatan copy dari
proses yang dipanggil dimana ia membuat sebuah proses yang terpisah yang
berbagi address space dengan proses yang dipanggil. Pembagian address space
dari parent process memungkinkan cloned task bersifat mirip dengan thread yang
terpisah.
Pembagian
address space ini dimungkinkan karena proses direpresentasikan di dalam Kernel
Linux. Di dalam Kernel Linux setiap proses direpresentasikan sebagai sebuah
struktur data yang unik. Jadi, daripada menciptakan yang baru maka struktur
data yang baru mengandung pointer yang menunjuk ke tempat dimana data berada.
Jadi ketika fork() dipanggil, proses yang baru akan tercipta beserta duplikasi
dari segala isi di struktur data di parent process, namun ketika clone()
dipanggil, ia tidak menduplikasi parent processnya tetapi menciptakan pointer
ke struktur data pada parent process yang memungkinkan child process untuk
berbagi memori dan sumber daya dari parent processnya. Project LinuxThread
menggunakan system call ini untuk mensimulasi thread di user space. Sayangnya,
pendekatan ini mempunyai beberapa kekurangan, khusunya di area signal handling,
scheduling, dan interprocess synchronization primitive.
Untuk
meningkatkan kemampuan Thread Linux, dukungan kernel dan penulisan ulang
pustaka thread sangat diperlukan. Dua project yang saling bersaing menjawab
tantangan ini. Sebuah tim yang terdiri dari pengembang dari IBM membuat NGPT
(Next Generation POSIX Threads). Sementara pengembang dari Red Hat membuat NPTL
(Native POSIX Thread Library).Sebenarnya Linux tidak membedakan antara proses
dan thread. Dalam kenyataannya, Linux lebih menggunakan istilah task
dibandingkan proses dan thread ketika merujuk kepada pengaturan alur
pengontrolan di dalam program.
Tidak ada komentar:
Posting Komentar