Session 7 – Threads (1)
Pengertian Threads
Thread adalah sebuah pengontrol aliran program pelaksanaan program dengan menggunakan kendali tunggal.
Apa yang dimiliki oleh Thread ?
- Status eksekusi thread (running, ready, terminated)
- Running -> Sebuah thread yang sedang dieksekusi dan didalam control dari CPU.
- Ready -> Thread yang sudah siap untuk dieksekusi, tetapi masih belum ada kesempatan untukmelakukannya.
- Terminated -> Status yang dimiliki pada saat proses telah selesai dieksekusi.
- Simpanan konteks thread (pada saat tidak running)
- Stack eksekusi
- Beberapa storage statis untuk menyimpan variabel lokal
- Hak akses ke memori dan resource yang dimiliki oleh proses
- Memori dan resource digunakan bersama-sama oleh semua thread dari sebuah proses (share)
Thread memungkinkan beberapa eksekusi berlangsung dalam lingkup proses yang sama.
2 Jenis Thread:
- Lightweight Process
Merupakan thread yang mempunyai beberapa properti dari sebuah proses.
- Multithreading
Merupakan kemampuan sistem operasi dalam mengeksekusi banyak thread yang berasal dari sebuah proses
Thread Model :
a) 1 proses 1 thread (one to one)
b) process banyak thread (many to one)
- Kolom pertama berisi beberapa item yang dibagikan oleh semua thread dalam suatu proses.
- Kolom kedua berisi beberapa item pribadi ke setiap thread.
Satu proses memiliki banyak thread dan setiap thread mempunyai stacknya masing-masing.
Apa keuntungan dari penerapan Thread?
- Pembentukan suatu thread jauh lebih cepat daripada pembentukan proses baru.
- Penelitian menunjukkan pembentukan thread 10 kali lebih cepat daripada pembentukan proses.
- Terminasi suatu thread jauh lebih cepat daripada terminasi proses.
- Perpindahan eksekusi antar thread jauh lebih cepat.
- Antar thread dapat berkomunikasi tanpa melibatkan kernel.
- Sebagai efek dari penggunaan share memori dan file.
Implemetasi Thread
- User Space
- Kernel tidak mengetahui keberadaan thread.
- Thread management dilakukan oleh aplikasi user level/library.
Keuntungan :
- Setiap proses mempunyai penjadwalan masing-masing.
- Performa lebih cepat.
- Dapat berjalan di berbagai OS.
Kerugian :
- Membutuhkan pemanggilan non-blocking system.
- Jika ada 1 threads yang sedang berjalan maka thread yang lain harus menunggu.
- Kernel Space
Thread management dilakukan oleh kernel.
Keuntungan :
- Tidak membutuhkan pemanggilan non-blocking system.
- Thread pada proses yang sama dapat dijalankan pada prosesor yang berbeda.
Kerugian :
- Membutuhkan biaya yang besar.
- Hybrid
- Ada sejumlah kernel level thread yang dipetakan ke sejumlah user level thread.
- Pembuatan thread, scheduling, sinkronisasi dilakukan di user space.
Pop Up Thread
Pembuatan thread baru dilakukan pada saat pesan datang.
a) Sebelum pesan datang
b) Sesudah pesan datang
Thread Basics
Thread State
- Spawn -> Thead muncul atau dibuat oleh proses/OS.
- Block – Thread menunggu sebuah event.
- Unblock – Ketika event yang ditunggu oleh thread muncul.
- Finish – Thread selesai. Register context dan stack yang digunakan dibebaskan.
Relasi antara Thread dan Process
Session 8 – Threads (2)
Thread di Linux
GNU/Linux menggunakan POSIX Standard Thread API. Dikenal dengan nama pthread. Program dengan thread harus di-compile dengan option -lpthread.
Contoh : gcc testhread.c -o thread -lpthread
Pembuatan Thread
Setiap thread dalam sebuah program diidentifikasi dengan thread ID.
Type: pthread_t
Fungsi Untuk Membuat Thread
int pthread_create(pthread_t *obj, const pthread_attr_t* attr, void * (*func) (void *), void *arg);
Parameter ke:
1 → Thread ID
2 → Thread attribute (NULL untuk default attribute)
3 → Fungsi yang ingin dijalankan
4 → Parameter untuk fungsi yang dijalankan
- Thread ID digunakan untuk mengambil ID dari thread yang dibuat
- Parameter attr digunakan untuk mengatur properti khusus dari thread. Contoh : penjadwalan dan prioritas.
- Jika attr bernilai NULL, thread akan dibuat dengan penjadwalan dan prioritas default.
- Func adalah pointer ke function. (function hanya dapat mengambil void * parameter)
- Arg adalah void * yang mewakili argumen yang diteruskan ke function func ketika thread dieksekusi.
- Mengembalikan nilai 0 jika sukses.
Setting Thread Attributes
Beberapa properti :
- Contention Scope
Digunakan untuk mengatur properti penjadwalan baik di dalam proses atau pada sistem global.
- Stack Size & Stack Address
Memungkinkan programmer untuk mengatur seberapa besar ukuran stack dan di mana letak memory itu berada.
- Detach State
Dapat membuat thread terpisah atau tergabung.
- Schedule Policy & Schedule Parameters.
Jika sistem operasi mendukung maka kita dapat melihat secara garis besar penjadwalan mana yang harus dilakukan dalam proses Light Weight Processes (LWP’s).
- Ketika thread dibuat dengan objek atribut yang sesuai maka akan memiliki behavior yang telah ditentukan.
- Untuk mengatur objek atribut harus memanggil function : pthread_attr_init().
Detached Threads
- Detached threads merupakan thread yang diabaikan oleh thread yang lain.
- Ketika thread dihentikan, maka secara otomatis dibangun kembali oleh OS.
Terminating Thread
- pthread_exit()
Merupakan function yang berfungsi untuk mengambil pointer ke data dan dikembalikan saat thread diinisialisasikan.
Kapan Menggunakan Thread?
- Thread cocok digunakan untuk program yang melakukan task secara bersamaan atau
memiliki sejumlah task yang dapat diselesaikan secara paralel untuk menghasilkan hasil.
- Saat membuat program menggunakan thread, kita harus mengatur program tersebut agar berbagai task tersebut dapat dijalankan secara bersamaan.
Contoh : Masalah grafis komputer ( ray tracing ), manipulasi matriks.