Thread
Suatu proses didefinisikan oleh
resource yang digunakan dan lokasi yang akan dieksekusi. Namun ada kalanya
proses-proses akan menggunakan resource secara bersama-sama. Suatu unit dasar
dari CPU utilization yang berisi program counter, kumpulan register, dan ruang
stack disebut dengan thread atau lighweight process(LWP). Thread akan bekerja
sama dengan thread lainnya dalam hal penggunaan bagian kode, bagian data, dan
resource sistem operasi, seperti open file dan sinyal secara kolektif yang
sering disebut dengan task.
- Thread adalah unit terkecil dalam suatu proses yang bisa dijadwalkan oleh sistem operasi.
- Merupakan sebuah status eksekusi (ready, running, suspend, block, queue, dll)
- Kadang disebut sebagai proses ringan (lightweight).
- Unit dasar dari dari sistem utilisasi pada processor (CPU).
- Dalam thread terdapat: ID Thread, Program Counter, Register dan Stack.
- Sebuah thread berbagi code section, data section dan resource sistem operasi dengan thread yang lain yang memiliki proses yang sama.
Single-Threading dan Multi-Threading
• Single-Threading
adalah
sebuah lightweight process (proses sederhana) yang mempunyai thread tunggal
yang berfungsi sebagai pengendali/ controller.
• Multi-Threading
adalah
proses dengan thread yang banyak dan mengerjakan lebih dari satu tugas dalam
satu waktu
Dalam
gambar tersebut terlihat perbedaan antara single thread dengan multi thread.
Setiap thread dapat melakukan proses tersendiri, sehingga proses yang semula
besar dipecah ke dalam proses kecilkecil, sedangkan pada single thread hanya
ada 1 thread yang menangani proses yang besar. Tentu multithread akan lebih
cepat dari pada single thread, namun dalam kasus tertentu terlalu banyak
multithread justru memperlambat kerja atau proses.
Keuntungan Multi-Threading
1.
Responsive; tanggap : Multi-Threading 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.
2.
Pembagian sumber daya : Secara default, thread membagi memori dan sumber daya
dari proses. Ketika thread berjalan pada data yang sama, thread tersebut bisa
berbagi cache memory.
3.
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.
4.
Pemberdayaan arsitektur multiprosesor: Keuntungan dari multi-threading dapat
ditingkatkan dengan arsitektur multiprosesor, dimana setiap thread dapat jalan
secara paralel 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.
2.4
Thread dalam Sistem Operasi
• Sistem
operasi telah mendukung proses multithreading.
• Setiap
sistem operasi memiliki konsep tersendiri dalam pengimplementasiannya.
• Sistem
operasi dapat mendukung thread pada tingkatan kernel maupun tingkatan pengguna.
Model Multi-Threading
1.
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.
2.
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.
3.
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
cancellation
Thread
cancellation/ pembatalan thread ialah pemberhentian thread sebelum tugasnya
selesai. Misalnya jika dalam program Java hendak mematikan Java Virtual Machine
(JVM). Sebelum JVM dimatikan, maka seluruh thread yang berjalan harus
dihentikan terlebih dahulu. Thread yang akan diberhentikan disebut sebagai
target thread. Pembatalan Thread terdiri dari 2 jenis:
1.
Asynchronous cancellation: suatu thread seketika itu juga memberhentikan target
thread.
2.
Deffered cancellation: target thread secara perodik memeriksa apakah dia harus
berhenti, cara ini memperbolehkan target thread untuk memberhentikan dirinya
sendiri secara terurut.
2.7
Thread Pools
Thread
Pools adalah cara kerja dengan membuat beberapa thread pada proses startup dan
menempatkan mereka ke pools.
Keuntungan
menggunakan Thread Pools
• 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 penting pada sistem
yang tidak dapat mendukung banyak thread yang berjalan secara concurrent.
THREADS PADA WINDOWS
Windows mengunakan Win32 API sebagai API
utama dalam hampir semua sistem operasi Microsoft. Selain itu windows
mengimplementasi model relasi One-to-One, dimana terdapat satu kernel thread
yang berasosiasi dengan masing – masing user thread. Thread pada windows secara
umum mempunyai komponen sebagai berikut :
•
Thread ID
•
Register set
•
User stack dan kernel stack
•
Private storage area.
Register set, stacks dan private data
storage disebut sebagai context dari sebuah thread. Struktur data utama dari
sebuah thread :
•
ETHREAD (executive
thread block)
•
KTHREAD (kernel
thread block)
•
TEB (thread
environment block) ETHREAD (executive thread block)
Bagian penting dari ETHREAD adalah KTHREAD, Process ID,
Thread start address. Blok KTHREAD merupakan pointer yang merujuk pada kernel
thread (KTHREAD), Process ID juga merupakan suatu pointer yang menunjuk pada
proses utama yang memiliki thread tersebut dan Thread start address adalah
alamat dari rutin awal thread.
KTHREAD (kernel thread block)
KTHREAD menyimpan informasi yang dibutuhkan oleh kernel untuk
dapat melakukan penjadwalan dan sinkronisasi thread. Pada KTHREAD juga terdapat
kernel stack, yang mana akan digunakan ketika thread berjalan pada kernel mode.
Juga terdapat pointer yang menunjuk TEB.
TEB (thread environment block)
TEB menyimpan informasi image loader dan beberapa DLLs
dari windows. Komponen - komponen ini berjalan pada user mode, maka dibutuhkan
suatu struktur data yang dapat dimanipulasi(writable) pada user mode. Oleh
karena itu, tidak seperti KTHREAD dan ETHREAD yang berada pada kernel space,
TEB berada pada user space.