Contoh Thread pada Linux
Thread
Ulir atau thread (singkatan dari "thread of execution") dalam ilmu komputer, diartikan sebagai sekumpulan perintah (instruksi) yang dapat dilaksanakan (dieksekusi) secara sejajar dengan ulir lainnya, dengan menggunakan cara time slice (ketika satu CPU melakukan perpindahan antara satu ulir ke ulir lainnya) atau multiprocess (ketika ulir-ulir tersebut dilaksanakan oleh CPU yang berbeda dalam satu sistem). Ulir sebenarnya mirip dengan proses, tapi cara berbagi sumber daya antara proses dengan ulir sangat berbeda. Multiplethread dapat dilaksanakan secara sejajar pada sistem komputer. Secara umum multithreading melakukan time-slicing (sama dengan time-division multipleks), di mana sebuah CPU bekerja pada ulir yang berbeda, di mana suatu kasus ditangani tidak sepenuhnya secara serempak, untuk CPU tunggal pada dasarnya benar-benar melakukan sebuah pekerjaan pada satu waktu. Teknik penggantian (switching) ini memungkinkan CPU seolah-olah bekerja secara serempak.
Urutan. Sesuatu yang dieksekusi secara konsekuen dan dapat diiterupsi sehingga prosesor beralih ke thread lain. Dari sudut pandang penjadwalan, konsep ini ekivalen proses pada kebanyakan sistem operasi konvensional sebagai satu unit sasaran penjadwalan.
Urutan. Sesuatu yang dieksekusi secara konsekuen dan dapat diiterupsi sehingga prosesor beralih ke thread lain. Dari sudut pandang penjadwalan, konsep ini ekivalen proses pada kebanyakan sistem operasi konvensional sebagai satu unit sasaran penjadwalan.
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.
User Thread
User thread didukung oleh kernel dan diimplementasikan oleh thread library ditingkat pengguna. Library mendukung untuk pembentukan thread, penjadualan, dan managemen yang tidak didukung oleh kernel. Contoh user thread adalah POSIX Pthreads, Mach C-threads, dan Solaris threads.
Kernel Thread
Kernel thread didukung secara langsung oleh sistem operasi: pembentukan thread, penjadualan, dan managemen dilakukan oleh kernel dalam ruang kernel. Karena managemen thread telah dilakukan oleh sistem operasi, kernel thread biasanya lebih lambat untuk membuat dan mengelola daripada pengguna thread. Windows NT, Solaris, dan Digital UNIX adalah sistem operasi yang mendukung kernel thread.
Model Multithreading
- Many-to-One
Model manytoone 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.
- One-to-One
Model onetoone memetakan setiap thread pengguna ke dalam satu kernel thread. Hal ini membuat model onetoone lebih sinkron daripada model manytoone 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 onetoone diimplementasikan oleh Windows NT dan OS/2.
- Many-to-Many
Beberapa tingkatan thread pengguna dapat menggunakan jumlah kernel thread yang lebih kecil atau sama dengan jumlah thread pengguna. Jumlah dari kernel thread dapat dispesifikasikan untuk beberapa aplikasi dan beberapa mesin (suatu aplikasi dapat dialokasikan lebih dari beberapa kernel thread dalam multiprosesor daripada dalam uniprosesor) dimana model manytoone mengizinkan pengembang untuk membuat thread pengguna sebanyak mungkin, konkurensi tidak dapat tercapai karena hanya satu thread yang dapat dijadualkan oleh kernel dalam satu waktu. Model onetoone mempunyai konkurensi yang lebih tinggi, tetapi pengembang harus hatihati untuk tidak membuat terlalu banyak thread tanpa aplikasi dan dalam kasus tertentu mungkin jumlah thread yang dapat dibuat dibatasi.
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.
Komentar
Posting Komentar