0% menganggap dokumen ini bermanfaat (0 suara)
81 tayangan46 halaman

Materi 4

Dokumen tersebut membahas tentang konsep thread sebagai unit dasar penggunaan CPU dalam sistem multithread. Dibahas pula model multithread, library thread seperti Pthreads, strategi implicit threading seperti thread pools dan OpenMP, serta permasalahan dalam pemrograman multithread.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
81 tayangan46 halaman

Materi 4

Dokumen tersebut membahas tentang konsep thread sebagai unit dasar penggunaan CPU dalam sistem multithread. Dibahas pula model multithread, library thread seperti Pthreads, strategi implicit threading seperti thread pools dan OpenMP, serta permasalahan dalam pemrograman multithread.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 46

Thread

Materi

• Pengenalan Thread
• Pemrograman Multicore
• Model Multithread
• Thread Library
• Implicit Threading
• Permasalahan dalam Thread
• Thread dalam Berbagai Sistem Operasi
Tujuan

• Memperkenalkan konsep thread – unit dasar dari


penggunaan CPU yang terbentuk dari sistem
multithread
• Mendiskusikan API untuk library thread Pthreads
• Mengeksplor beberapa strategi implicit threading
• Membahas masalah pada program multithread
Pengenalan Thread
Thread

• Unit dasar dari pemanfaatan CPU


• Thread berjalan di dalam aplikasi
• Pada dasarnya satu proses terdiri atas satu
thread (single-thread)
– Dalam sekali waktu hanya ada satu tugas yang
bisa dikerjakan dalam satu proses
• Padahal program-program terkini butuh
menjalankan beberapa tugas dalam sekali
waktu.
– Butuh multi-thread dalam satu proses.
Thread

• Pembentukan proses cukup memberatkan


sistem sementara pembentukan thread relatif
ringan
• Meningkatkan efisiensi
• Secara umum, kernel menerapkan prinsip
multithread
Single Thread vs Multi Thread
Contoh Kebutuhan Multithreading
• Web browser
– Thread untuk menampilkan halaman web, gambar
– Thread untuk mengunduh data dari jaringan
• Pengolah kata
– Thread untuk menerima dan menampilkan hasil
pengetikan
– Thread untuk mengecek grammar
• Webserver
– Thread untuk menangani request dari banyak user
Contoh Multithread pada Webserver
Question

Mengapa harus multi-thread? Mengapa tidak


pakai multiprocess saja? Apa keuntungan pakai
multithread?
Keuntungan Multithread
• Responsiveness
– Program tetap bisa berjalan walaupun ada sebagian tugas yang memakan waktu lama.
– Contoh : Web browser tetap dapat digunakan walaupun sedang ada aktifitas download.
• Resource sharing
– Multiprocess : Butuh implementasi shared memory atau message passing untuk berbagi
data antar-proses.
– Multithread : Antar-thread dalam satu proses sudah berbagi data
• Economy
– Multiprocess : Butuh alokasi banyak memori dan resource untuk membuat proses baru
– Multithread : Antar-thread sudah berbagi resource yang dialokasikan untuk sebuah
proses
• Scalability
– Process : Satu processor hanya bisa mengeksekusi satu proses
– Thread : Setiap thread dalam satu proses dapat dieksekusi secara paralel oleh processor yang
berbeda
Multicore Program
Multicore Program

• Multicore/Multiprocessor : ada lebih dari satu


processor/core processor dalam satu system
• Pemrograman multithread memungkinkan
pemanfaatan fitur multicore pada suatu system
• Contoh sebuah program dengan 4 threads
– Single core :
• Eksekusi thread dilakukan secara bergantian (concurrent)
– Multi Core :
• Eksekusi dilakukan secara parallel sesuai jumlah core
• Memungkinkan pembagian tugas dalam satu program
Question

• Apa perbedaan concurrent dan parrarel?


Concurrency vs. Parallelism
• Concurrent execution pada single core
– Hanya ada satu thread yang dieksekusi sekali waktu
– Thread dieksekusi dengan progress tertentu secara bergantian

• Paralleilism pada multi-core


– Beberapa thread dieksekusi secara parallel sesuai jumlah core
Tantangan Pemrograman pada Sistem
Multi-core
• Identifikasi aktifitas
– Identifikasi bagian program mana saja yang dapat berjalan terpisah
• Keseimbangan
– Tugas yang dipisah memiliki beban yang seimbang
• Pemisahan data
– Bagaimana membagi data antar bagian program yang terpisah?
• Ketergantungan data
– Bagaimana jika data pada satu tugas bergantung dengan data dari
tugas lain?
• Testing dan debugging
– Bagaimana melakukan testing dan debugging pada bagian program
yang terpisah?
Tipe Parralelism

• Data parralelism

• Task parralelism
Data Parallelism

• Distribusi bagian-bagian data ke masing-


masing core processor berbeda untuk diolah
• Operasi pada masing-masing core sama
• Contoh :
– Operasi penjumlahan bilangan 1 sampai N
– Ada 2 core processor
– Penjumlahan data 1 sampai (N/2) di core 1 dan
(N/2+1) sampai N di core 2
Task Parallelism

• Distribusi tugas (thread) berbeda ke masing-


masing core processor yang berbeda
• Operasi pada masing-masing core beda
• Contoh :
– Core 1 menghitung standard deviasi
– Core 2 mencari nilai max
Multithreading Model
User Thread vs Kernel Thread

• Berdasarkan pengendalinya, thread dibagi :


– User thread
– Kenel thread
• User thread dikendalikan oleh program pada level
user tanpa campur tangan kernel – lebih cepat
– POSIX Pthreads, Win32 threads, Java threads
• Kernel thread dikendalikan langsung oleh sistem
operasi – lebih lama
– Windows XP/2000/NT, Solaris, Linux, Mac OS X
• Ada beberapa model hubungan antara kernel dan
user thread
Model Many-to-One
• Beberapa user-thread dipetakan ke satu kernel-
thread
• Kelebihan
– Tidak ada batasan jumlah user-thread yang
bisa dibuat
• Kelemahan
– Hanya satu user-thread yang dapat
mengakses kernel-thread pada satu saat
– Satu thread melakukan blocking (misal I/O),
seluruh proses ter-block
– Multithread tidak dapat dijalankan secara
parallel pada sistem multicore
• Contoh
– GNU Portable Threads
Model One-to-One

• Satu user-thread dipetakan ke satu


kernel-thread
• Pembuatan satu user-thread =
Pembuatan satu kernel-thread
• Kelebihan
– Satu thread blocking tidak akan
berpengaruh ke thread lain
– Multithread dapat dijalankan secara
parallel pada sistem multicore
• Kelemahan
– Jumlah user-thread yang bisa dibuat
terbatas
• Pembuatan kernel-thread dapat membebani
performa
• Contoh : Windows NT/XP/2000,
Linux, Solaris 9
Model Many-to-Many
• Beberapa user-thread dipetakan ke
beberapa kernel-thread (multiplexing)
• Memungkinkan sistem operasi untuk
meng-create sejumlah kernel--thread
• Jumlah kernel-thread yang dibuat
bergantung aplikasi dan spesifikasi
mesin
– Jumlahnya kernel-thread lebih sedikit atau
sama dengan jumlah user-thread
• Kelebihan :
– Satu thread blocking tidak akan
berpengaruh ke thread lain
– Tidak ada batasan jumlah user-thread
– Multithread dapat dijalankan secara parallel
pada sistem multicore
• Contoh : Windows NT/2000, Solaris 9
Two Level Model

• Mirip M:M, tapi


mengijinkan user-level
thread dipetakan ke
satu kernel thread
• Contoh :
– Solaris 8 ke bawah
Thread Library
Thread Libraries

• Application Programming Interface (API)


untuk pembuatan dan manajemen thread
bagi programmer
• Dua jenis implementasi
– Library diimplementasi di level user
– Library diimplementasi di level kernel. Bisa
dipanggil dengan system call
Strategi Implementasi

• Asynchronous Threading
– Setelah thread induk membuat thread anak, proses induk
kembali melanjutkan eksekusi
– Thread induk dan thread anak berjalan independen
– Proses induk tidak perlu tahu status thread anak
• Synchronous Threading
– Proses induk menunggu semua thread anak selesai
sebelum melanjutkan eksekusi (fork-join)
– Setelah thread anak selesai, join ke thread induk
Pthreads

• Tersedia untuk user-level dan kernel-level thread

• Standar POSIX (IEEE 1003.1c) API untuk pembuatan dan


sinkronisasi thread

• Spesifikasi, bukan implementation

• API menspesifikasi behaviour, untuk implementasi


tergantung developer

• Banyak digunakan pada OS berbasis UNIX seperti


Solaris, Linux, Mac OS X
Contoh Pthreads
Contoh Pthreads (Cont.)
Pthreads Code for Joining 10 Threads
(fork-join strategy)
Implicit Threading
Implicit Threading
• Dalam perkembangannya, sebuah aplikasi dapat
mempunyai ratusan hingga ribuan thread
– Contoh : multithread pada webserver
• Masalah :
– Identifikasi, pemisahan data, ketergantungan data
– Ketepatan hasil program
• Solusi
Implicit threading : pembuatan dan manajemen
thread dilakukan oleh compiler dan run-time library,
bukan programmer
Metode Implicit Threading

• Thread Pools
• OpenMP
Thread Pools
• Latar Belakang
– Ada ratusan/ribuan thread yang harus dibuat pada satu aplikasi.
Contoh : webserver
– Pembuatan thread memakan waktu, terlebih pada kenyataannya
thread dibuang seketika sesudah ia menyelesaikan tugasnya
• Solusi Thread Pools
– Buat beberapa thread di proses startup dan tempatkan dalam
penampung (pool) dimana mereka menunggu untuk di-assign
– Ketika sebuah tugas akan dieksekusi, gunakan thread-thread yang
sudah tersedia dalam pool, ketika sudah selesai kembali ke pool dan
ketika tidak tersedia pada saat dibutuhkan maka server menunggu
sampai ada satu thread yang selesai
• Kelebihan
– Lebih cepat daripada membuat thread baru setiap kali ada tugas
– Jumlah thread dalam aplikasi dibuat sesuai dengan ukuran dari pool
OpenMP
• API untuk C, C++, FORTRAN
• Menyediakan dukungan untuk
pemrograman parallel pada
lingkungan shared-memory
• Programmer dapat menentukan
Parallel regions – bagian code yang
berjalan secara parallel

#pragma omp parallel


Membuat threads sebanyak jumlah inti

#pragma omp parallel for


for(i=0;i<N;i++) {
c[i] = a[i] + b[i];
}
Area dalam parallel
Permasalahan dalam Thread
Permasalahan dalam Thread

• System call fork() dan exec()


• Signal handling
• Pembatalan thread
• Thread local storage
System call fork() dan exec()
• Permasalahan
– Jika fungsi fork() dipanggil oleh salah satu thread,
apakah semua thread diduplikasi atau hanya
thread yang memanggil saja?
• Solusi
– Jika fungsi exec() dipanggil setelah fork(), duplikasi
hanya untuk thread yang memanggil
• Program yang dipanggil di exec() akan menggantikan
seluruh proses
– Jika tidak memanggil exec(), duplikasi semua
thread
Signal Handling

• Sinyal digunakan pada UNIX system untuk memberitahu sebuah


proses bahwa sebuah even terjadi – synchronous atau
asynchronous
– Pembagian dengan nol, pengaksesan memori secara ilegal
• Sinyal mengikuti pola yang sama:
 Dibuat oleh kejaidan atau peristiwa tertentu
 Diberikan ke sebuah process
 Sinyal ditangani : default handler atau user-defined handler
• Masalah : Ke mana sinyal harus diberikan pada proses dengan
multi-thread?
– Berikan sinyal ke thread yang dituju oleh sinyal tersebut
– Berikan sinyal ke setiap thread pada proses tersebut
– Berikan sinyal ke thread tertentu dalam proses
– Tunjuk satu thread untuk menangani semua sinyal yang ditujukan
pada proses
Thread Cancellation

• Penghentian paksa thread sebelum selesai menjalankan tugas


• Thread yang akan dibatalkan disebut target thread
• Dua pendekatan:
– Asynchronous cancellation menghentikan target thread segera
– Deferred cancellation memungkinkan target thread untuk mengecek
secara periodik sebelum menghentikan thread
• Pthread code to create and cancel a thread:
• Pada Linux systems, penghentian thread ditangani melalui sinyal
Thread-Local Storage
• Thread-local storage (TLS) membuat setiap thread
mempunyai duplikat dari data tertentu untuk dirinya
sendiri dalam keadaan tertentu
Thread dalam Berbagai Sistem
Operasi
Linux Threads

• Linux menggunakan terminologi tasks daripada threads

• Tidak membedakan antara proses dan thread


– Menggunakan istilah task dibanding thread

• fork() dan clone()

• Pembuatan thread melalui system call clone()

• clone()mengijinkan thread anak untuk berbagi alamat dengan


proses induk
Terima Kasih

Anda mungkin juga menyukai