You are on page 1of 56

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,
Windows, dan Java
• Mengeksplor beberapa strategi implicit threading
• Membahas masalah pada program multithread
Pengenalan Thread
Thread
• Unit dasar dari pemanfaatan CPU
• 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.
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
Single Thread vs Multi Thread
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
• Kernel thread dikendalikan langsung oleh sistem
operasi
• 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
– Satu thread melakukan blocking (misal I/O),
seluruh proses ter-block
– Multithread tidak dapat dijalankan secara
parallel pada sistem multicore
• Contoh
– Solaris Green Threads
– 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, Linux
Model Many-to-Many
• Beberapa user-thread dipetakan ke
beberapa kernel-thread (multiplexing)
• Jumlah kernel-thread yang dibuat
bergantung aplikasi dan spesifikasi
mesin
• Kelebihan :
– Satu thread blocking tidak akan
berpengaruh ke thread lain
– Tidak ada batasan jumlah user-thread
Two Level Model
• Mirip M:M, tapi
mengijinkan user-level
thread dipetakan ke
satu kernel thread
• Contoh :
– IRIX
– HP-UX
– TRU64-Unix
– Solaris 8 ke bawah
Thread Library
Thread Libraries
• Application Programming Interface (API)
untuk pembuatan dan manajemen thread
• Dua jenis implementasi
– Library diimplementasi di level user
– Library diimplementasi di level kernel. Bisa
dipianggil dengan 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

• 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)
Windows Multithreaded C Program
Java Threads

• Java threads diatur oleh JVM


• Implementasi menggunakan model thread
yang disediakan oleh OS
• Java threads dapat dibuat dengan:
– Extends Thread class dan override method
run()
– Implement Runnable interface
Java Multithreaded Program : implement Runnable
Java Multithreaded Program (2)
Java Thread : Important Notes
• Tidak ada konsep global variabel
• Proses berbagi data dilakukan dengan passing
reference ke object
– Contoh : panggil method getSum() dan setSum()
• Implementasi fork-join strategy dilakukan
dengan memanggil method join()
Question
• Apa perbedaan implementasi thread di Java
dengan implements Runnable dan extend
Thread class?
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
• Grand Central Dispatch
Thread Pools
• Latar Belakang
– Ada ratusan/ribuan thread yang harus dibuat pada satu aplikasi.
Contoh : webserver
– Pembuatan thread memakan waktu dan resource
• Solusi Thread Pools
– Buat beberapa thread di awal process dan tempatkan dalam
penampung (pool)
– Ketika sebuah tugas akan dieksekusi, gunakan thread-thread yang
sudah tersedia dalam pool
• Kelebihan
– Lebih cepat daripada membuat thread baru setiap kali ada tugas
– Thread pool dapat membatasi jumlah threa yang dibuat sekali waktu
– Ada pemisahan bagian antara tugas yang akan dikerjakan dengan
pembuatan thread
• Sebuah tugas dapat dilakukan secara berulang
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


Create as many threads as there are
cores

#pragma omp parallel for


for(i=0;i<N;i++) {
c[i] = a[i] + b[i];
}
Run for loop in parallel
Grand Central Dispatch
• Tekologi Apple untuk Mac OS X dan iOS
• Programmer dapat menentukan bagian code yang
berjalan secara parallel
• Detail pengaturan threading sudah diatur oleh GCD
• Code ditaruh di “^{ }” -
ˆ{ printf("I am a block"); }
• Bagian block ditempatkan dalam dispatch queue
– Block dijalankan oleh thread yang tersedia di thread pool
– Block dihapus dari dispatch queue
Permasalahan dalam Thread
Permasalahan dalam Thread
• System call fork() dan exec()
• Signal handling
• Pembatalan thread
• Thread local storage
• Schedulers activation
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

• Signals digunakan pada UNIX system untuk memberitahu sebuah


proses bahwa sebuah even terjadi.
– Divide by zero
– Buffer overflow
• Signal handler digunakan untuk menangani signal
 Signal dibuat oleh event tertentu
 Signal diberikan ke sebuah process
 Signal ditangani oleh satu dari dua jenis handler : default handler
atau user-defined handler
• Masalah : Kemana signal harus diberikan pada proses dengan
multi-thread?
– Berikan signal ke satu thread dimana signal tersebut digunakan
– Berikan signal ke setiap thread
– Berikan signal ke beberapa thread
– Tunjuk satu thread untuk menangani semua signal
Thread Cancellation

• Pemusnahan thread sebelum selesai menjalankan tugas


• Thread yang akan dibatalkan disebut target thread
• Dua pendekatan:
– Asynchronous cancellation memusnahkan target thread segera
– Deferred cancellation membuat target thread untuk mengecek
secara periodik apakah dia harus mengakhiri eksekusi
• Pthread code to create and cancel a thread:
Thread Cancellation (Cont.)
• Pemusnahan thread bergantung status thread

• Default type adalah deferred


– Pemusnahan terjadi hanya ketika thread mencapai cancellation
point
• I.e. pthread_testcancel()
• Then cleanup handler is invoked

• Pada Linux systems, pemusnahan thread ditangani melalui signals


Scheduler Activations
• M:M dan two-level model butuh komunikasi untuk
menjaga alokasi jumlah kernel thread dari sebuah aplikasi

• Biasanya menggunakan perantara data structure antara


user dan kernel threads – lightweight process (LWP)
– Terlihat sebagai virtual processor yang dapat menjadwalkan
user-thread mana yang berjalan
– Setiap LWP ditempelkan ke kernel thread
– Berapa jumlah LWP yang harus dibuat?

• Scheduler activations menyediakan upcalls -Sebuah


mekanisme komunikasi dari kernel ke upcall handler
dalam library thread.

• Komunikasi ini membuat aplikasi dapat menjaga jumlah


kernel thread yang dibuat
Thread-Local Storage
• Thread-local storage (TLS) membuat setiap thread
mempunyai duplikat datanya sendiri

• Berguna jika programmer tidak bisa mengontrol


pembuatan thread (ketika menggunakan thread pool)

• Beda dengan local variable


– Lingkup local variabel hanya dalam satu fungsi
– Lingkup TLS meliputi berbagai fungsi

• Mirip static data


– TLS unik untuk setiap thread
Thread dalam Berbagai Sistem
Operasi
Windows Threads
• Thread di Windows dapat dibuat/diatur dengan Windows API

• Menerapkan one-to-one mapping, kernel-level

• Setiap thread mengandung


– Thread id
– Register set merepresentaskan status prosesor
– Memisahkan user dan kernel stack ketika thread berjalan di user mode atau kernel mode
– Private data storage area yag digunakan oleh run-time libraries and dynamic link libraries
(DLLs)

• Register set, stacks, dan private storage area disebut sebagai context thread

• Struktur data sebuah thread meliputi:


– ETHREAD (executive thread block) – pointer ke proses induk dari sebuah thread dan ke
KTHREAD, dalam kernel space
– KTHREAD (kernel thread block) – informasi penjadwalan dan sinkronisasi, kernel-mode
stack, pointer ke TEB, dalam kernel space
– TEB (thread environment block) – thread id, user-mode stack, thread-local storage, di user
space
Windows Threads Data Structures
Linux Threads

• Linux menggunakan terminologi tasks daripada threads

• Pembuatan thread melalui system call clone()

• clone()mengijinkan thread anak untuk berbagi data dengan


proses induk
– Flags control behavior

• struct task_struct menunjuk ke process data structures


(shared or unique)
Terima Kasih

You might also like