Anda di halaman 1dari 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
Web browser
Multithreading
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

Anda mungkin juga menyukai