Thread adalah :
- - State eksekusi (running, ready, dll)
- - Mempunyai stack eksekusi
- - Mengakses memory dan resource nya dai proses
- Menyimpan isi thread ketika tidak dijalankan
Thread mengijinkan beberapa eksekusi untuk mengambil tempat dalam lingkungan proses yang sama.
Lightweight process --> karena thread memiliki properti dari proses.
Multithreading --> mengijinkan beberapa thread dalam proses yang sama.
Model Thread :
Setiap stack memiliki stack nya sendiri.
Keuntungan dari Thread ialah :
- - Memerlukan waktu yang sedikit untuk membuat thread yang baru daripada sebuah proses
- - Waktu untuk mengterminate thread lebih sedikit daripada pada proses
- - Waktu untuk mengubah dari 2 thread dalam proses yang sama sangast sedikit.
- - Thread yang berada dalam proses yang sama, maka dapat membagi memory dan file. Oleh karena itu, thread dapat berkomunikasi satu sama lain tanpa harus memanggil kernel.
Cth codingan :
int pthread_create (pthread_t *obj, const pthread_attr_t* attr, void* (*func) (void*), void* arg);
Implementasi Thread :
- User Space
Keuntungan :
- Mengijinkan setiap proses untuk mempunyai algoritma penjadwalan sendiri.
- Performa lebih bagus
Kerugian dari implementasian Thread :
- Implementasi untuk membloking system terpanggil
- Thread lain tidak dapat dijalankan kecuali thread yang pertama menyerah.
- Kernel Space
Keuntungan :
- Tidak perlu untuk pemanggilan non-blocking system yang baru.
Kerugian :
- Cost yang lebih besar untuk membuat dan menghancurkan thread.
- Hybrid
Pop Up Thread
(a) --> Ketika pesan belum sampai
(b) --> Ketika pesan telah sampai
Basic dari Thread :
1. Semua Thread di dalam proses yang sama saling membagi :
- Tempat alamat yang sama
- Instruksi proses
- Data
- Open files (descriptor)
- Sinyal dan signal handler
- Directory pekerjaan yang sedang dilakukan (current)
- ID dari user maupun grup
2. Setiap Thread memiliki komponen yang unik, yaitu :
- ID Thread
- Set register, dan stack pointer
- Stack untuk variable lokal, dan alamat untuk return (return addresses)
- Signal mask
- Prioritas
- Return value
Thread State
1. Spawn
- Ketika sebuah proses diciptakan, otomatis thread untuk proses tersebut juga akan tercipta.
- Thread dalam proses dapat menciptakan thread lain dalam proses tersebut, yang dapat menyediakan instruksi pointer dan argumen untuk thread baru tersebut. Thread baru tersebut nanti nya akan mempunyai konteks register dan stack space nya sendiri dan akan diletakkan pada queue yang sudah siap.
2. Block
- Ketika thread diharuskan untuk berhenti dalam suatu keadaan, thread akan memblok user register nya, program counter dan juga stack pointer
- Prosesor boleh mengaktifkan eksekusi untuk thread aktif lainnya pada proses yang sama maupun berbeda
3. Unblock
- Ketika keaddan dimana thread terblok, thread akan dipindah ke barisan urutan yang siap (ready queue)
4. Finish
- Ketika thread telah selesai, konteks register dan stacks nya akan dialokasikan
Contoh Multi Threading pada Uniprocessor
Relasi dari Thread dan Proses :
- 1 : 1
- Setiap thread yang dieksekusi merupakan proses yang unik dengan alamat dan resource nya sendiri
- Cth : implementasian pada LINUX yang tradisional
- M : 1
- Sebuah proses mendefinisikan alamat dan dynamic resource kepemilikan. Thread yang banyak dapat di buat dan dieksekusi tanpa harus ada proses tersebut
- Cth : Windows NT, Solaris, OS/2, OS/390, MACH
- 1 : M
- Thread yang dapat bermigrasi (berpindah) dari satu lingkungan proses ke lain nya. Thread dengan begitu dapat dipindah secara gampang dari system tersebut
- Cth : Ra (Cloud), Emerald
- M : M
- Kombinasi dari M:1 dan 1:M
- Cth : TRIX
Threading Granularity
1. Coarse Threading
- Module bersifat individu, disebut sebagai sistem, ditetapkan pada prosesor sendiri
- Pada source engine sate, dapat disebut untuk meletakkan rendering pada satu prosessor, AI (Artificial Intelligence) pada yang lain, kemudian physic pada lainnya.
- Setiap module merupakan single threaded dan prinsip koordinasi melibatkan sinkronisasi dari semua thread dengan thread timeline
2. Fine-Grained Threading
- Task yang sama terletak pada beberapa prosessor
3. Hybrid Threading
- Melibatkan penggunaan yang selektif pada fine grained threading untuk beberapa sistem dan single threading untuk beberapa sistem yang lain.
POSIX (Portable Operating System Interface) Thread :
Programming pada Thread :
int pthread_create (pthread_t *obj, const pthread_attr_t* attr, void* (*func) (void*), void* arg);
- Parameter obj menunjuk pada struktur dari pthread_t, dimana digunakan untuk menyimpan ID yang sudah dibuat, beserta detail nya.
- Parameter attr menunjuk pada objek dari pthread_attr_t dimana digunakan untuk men-set properti spesial dari thread. (scheduling dan properti prioritas)
- Ketika attr = NULL, thread akan dibuat ulang dengan scheduling dan properti prioritas yang default
- "func" adalah pointer dari sebuah fungsi (fungsi hanya dapat mengambil parameter void*)
- "arg" adalah void* dimana merepresentasikan argumen yang diberikan kepada fungsi func ketika thread dieksekusi
- Ketika berhasil, fungsi akan meng-return 0
pthread_self()
--> untuk mendapatkan ID thread sendiri
pthread_join()
--> untuk bergabung dengan flow kontrol yang berbeda
--> ketika dipanggil, thread yang terpangggil akan ditunda sampai eksekusi dari target thread telah selesai
--> melepas resource
pthread_exit()
--> fungsi mengambil pointer ke data dimana dikembalikan ketika thread digabung
Tidak ada komentar:
Posting Komentar