Thread Materi Pengenalan Thread Pemrograman Multicore Model Multithread

  • Slides: 56
Download presentation
Thread

Thread

Materi • • Pengenalan Thread Pemrograman Multicore Model Multithread Thread Library Implicit Threading Permasalahan

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

Tujuan • Memperkenalkan konsep thread – unit dasar dari penggunaan CPU yang terbentuk dari

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

Pengenalan Thread

Thread • Unit dasar dari pemanfaatan CPU • Pada dasarnya satu proses terdiri atas

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 –

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

Contoh Multithread pada Webserver

Question Mengapa harus multi-thread? Mengapa tidak pakai multiprocess saja? Apa keuntungan pakai multithread?

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

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

Single Thread vs Multi Thread

Multicore Program

Multicore Program

Multicore Program • Multicore/Multiprocessor : ada lebih dari satu processor/core processor dalam satu system

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?

Question • Apa perbedaan concurrent dan parrarel?

Concurrency vs. Parallelism • Concurrent execution pada single core – Hanya ada satu thread

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

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

Tipe Parralelism • Data parralelism • Task parralelism

Data Parallelism • Distribusi bagian-bagian data ke masing core processor berbeda untuk diolah •

Data Parallelism • Distribusi bagian-bagian data ke 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 core processor yang berbeda •

Task Parallelism • Distribusi tugas (thread) berbeda ke masing core processor yang berbeda • Operasi pada masing-masing core beda • Contoh : – Core 1 menghitung standard deviasi – Core 2 mencari nilai max

Multithreading Model

Multithreading Model

User Thread vs Kernel Thread • Berdasarkan pengendalinya, thread dibagi : – User thread

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 kernelthread • Kelebihan – Tidak ada

Model Many-to-One • Beberapa user-thread dipetakan ke satu kernelthread • 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 =

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

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

Two Level Model • Mirip M: M, tapi mengijinkan user-level thread dipetakan ke satu kernel thread • Contoh : – – IRIX HP-UX TRU 64 -Unix Solaris 8 ke bawah

Thread Library

Thread Library

Thread Libraries • Application Programming Interface (API) untuk pembuatan dan manajemen thread • Dua

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 system call

Strategi Implementasi • Asynchronous Threading – Setelah thread induk membuat thread anak, proses induk

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

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

Contoh Pthreads (Cont. )

Contoh Pthreads (Cont. )

Pthreads Code for Joining 10 Threads (fork-join strategy)

Pthreads Code for Joining 10 Threads (fork-join strategy)

Windows Multithreaded C Program

Windows Multithreaded C Program

Java Threads • Java threads diatur oleh JVM • Implementasi menggunakan model thread yang

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 : implement Runnable

Java Multithreaded Program (2)

Java Multithreaded Program (2)

Java Thread : Important Notes • Tidak ada konsep global variabel • Proses berbagi

Java Thread : Important Notes • Tidak ada konsep global variabel • Proses berbagi data dilakukan dengan passing reference ke object – Contoh : panggil method get. Sum() dan set. Sum() • Implementasi fork-join strategy dilakukan dengan memanggil method join()

Question • Apa perbedaan implementasi thread di Java dengan implements Runnable dan extend Thread

Question • Apa perbedaan implementasi thread di Java dengan implements Runnable dan extend Thread class?

Implicit Threading

Implicit Threading

Implicit Threading • Dalam perkembangannya, sebuah aplikasi dapat mempunyai ratusan hingga ribuan thread –

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 • Open. MP • Grand Central Dispatch

Metode Implicit Threading • Thread Pools • Open. MP • Grand Central Dispatch

Thread Pools • Latar Belakang – Ada ratusan/ribuan thread yang harus dibuat pada satu

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

Open. MP • • • API untuk C, C++, FORTRAN Menyediakan dukungan untuk pemrograman

Open. MP • • • 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(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 i. OS •

Grand Central Dispatch • Tekologi Apple untuk Mac OS X dan i. OS • 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

Permasalahan dalam Thread • • • System call fork() dan exec() Signal handling Pembatalan

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

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

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 l 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

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

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

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 •

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

Thread dalam Berbagai Sistem Operasi

Windows Threads • Thread di Windows dapat dibuat/diatur dengan Windows API • Menerapkan one-to-one

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

Windows Threads Data Structures

Linux Threads • Linux menggunakan terminologi tasks daripada threads • Pembuatan thread melalui system

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

Terima Kasih