Jumat, 22 Juni 2018

Komputasi Parallel - Pengantar Thread Programming

Pengantar Thread Programming


           Thread dalam sistem operasi dapat diartikan sebagai sekumpulan perintah (instruksi) yang dapatdilaksanakan (dieksekusi) secara sejajar dengan ulir lainnya, dengan menggunakan cara time slice (ketika satu CPU melakukan perpindahan antara satu ulir ke ulir lainnya) atau multiprocess (ketika ulir-ulir tersebut dilaksanakan oleh CPU yang berbeda dalam satu sistem). Ulir sebenarnya mirip dengan  roses, tapi cara berbagi sumber daya antara proses dengan ulir sangat berbeda. Multiplethread dapat  dilaksanakan secara sejajar pada sistem komputer. Secara umum multithreading melakukan time-slicing  (sama dengan time-division multipleks), di manasebuah CPU bekerja pada ulir yang berbeda, di mana suatu kasus ditangani tidak sepenuhnya secara serempak, untuk CPU tunggal pada dasarnya benar-benar melakukan sebuah pekerjaan pada satu waktu. Thread saling berbagi bagian program, bagian data dan sumber daya sistem operasi denganthread lain yang mengacu pada proses yang sama. Thread terdiri atas ID thread, program counter, himpunan register, dan stack. Dengan banyak kontrol thread proses dapat melakukan lebih dari satu pekerjaan pada waktu yang sama.

Karakteristik Thread
Proses merupakan lingkungan eksekusi bagi thread-thread yang dimilikinya. Thread-thread di satu proses memakai bersama sumber daya yang dimiliki proses, yaitu :
Ruang alamat.
Himpunan berkas yang dibuka.
Proses-proses anak.
Timer-timer.
Snyal-sinyal.
Sumber daya-sumber daya lain milik proses.

Jenis-jenis Thread Berdasarkan Waktu Penciptaannya
1. Static threads
Jumlah thread yang akan dibuat ditentukan saat penulisan dan kompilasi program. Tiap thread langsung dialokasikan stack tetap.
Keunggulan = sederhana.
Kelemahan = tidak fleksibel.

2. Dynamic threads
Penciptaan dan penghancuran thread “on-the-fly” saat eksekusi. Penciptaan thread biasanya menspesifikasikan fungsi utama thread (seperti pointer ke procedure) dan ukuran stack, dapat juga ditambah parameter-parameter lan seperti prioritas panjadwalan.
Keunggulan = fleksibel.
Kelemahan = lebih rumit.

Jenis – Jenis Proses Thread
A. Single Thread Process
Sebuah proses tradisional atau heavyweight process mempunyai single thread yang berfungsi sebagai pengendali. Dapat diartikan sebagai proses yang bekerja secara berurutan sesuai dengan urutan masing-masing thread (terstruktur) dan hanya mengerjakan satu tugas dalam satu waktu.

B. Multithread Process
Merupakan satu atau beberapa thread yang dijalankan secara bersamaan(multiproses), dimana masing-masing thread tersebut dijalankan pada jalur masing-masing. Setiap thread pada multithread menjalankan kode atau script program secara berurutan. Multithread dapat diartikan juga sebagai suatu proses dengan thread banyak dapat mengerjakan lebih dari satu tugas pada satu satuan waktu. Multithread sering pula disebut dengan multiproses atau multitasking pada system operasi.

Manfaat Thread
Thread bermanfaat untuk Multithreading yang berguna untuk Multiprocessor dan Singleprocessor.
Kegunaan untuk system Multiprocessor adalah :
a) Sebagai unit pararel atau tingkat granularitas pararelisme.
b) Peningkatan kinerja disbanding berbasis proses.
Kegunaan Multithreading pada Singleprocessor adalah :
a) Kerja foreground dan background sekaligus di satu aplikasi.
b) Penanganan asynchronous processing menjadi lebih baik.
c) Mempercepat eksekusi program.
d) Pengorganisasian program menjadi lebih baik.

Model Multithread
User (pengguna) thread
User thread didukung di atas kernel dan diimplementasi oleh thread library pada user level. library menyediakan fasilitas untuk pembuatan thread, penjadualan thread, dan managemen thread tanpa dukungan dari kernel. Didalam fasilitas user-level thread yang murni, semua tugas manajemen thread dilakukan oleh aplikasi dan kernel tidak mengetahui keberadaan thread.
Tiga kunci thread libraries :
POSIX Pthread
Win32 thread
Java thread
Adapun kelemahannya yang dialami yaitu apabila kernelnya merupakanthread tunggal maka apabila salah satu user-level thread menjalankan blockingsystem call maka akan mengakibatkan seluruh proses diblok walau pun ada threadlain yang dapat jalan dalam aplikasi tersebut.

Kernel thread
Kernel thread didukung langsung oleh sistem operasi. Pembuatan, penjadualan, dan managemen thread dilakukan oleh kernel pada kernel space.Pembuatan dan pengaturan kernel thread lebih lambat dibandingkan user thread.
Keuntungannya adalah jika sebuah thread menjalankan blocking systemcall maka kernel dapat menjadualkan thread lain di aplikasi untuk melakukaneksekusi. Pada lingkungan multiprocessor, kernel dapat menjadwal thread-thread pada processor yang berbeda.
Contoh sistem operasi yang mendukung kernel thread adalah Windows NT, Solaris, Digital UNIX.

Thread Libraries
1. Thread libraries menyediakan pemrogram dengan API untuk menciptakan dan memanage thread.
2. Dalam pengimplementasiannya ada dua cara, diantaranya :
Keseluruhan library pada ruang pemakai.
Kernel-support library yang didukung dengan OS.

Berdasarkan Pemetaan Thread 
Model multithreading berdasarkan dengan pemetaan dibedakan menjadi tiga bagian, yaitu:
1. Many-to-One 
Banyaknya User-Level thread yang dipetakan ke kernel thread tunggal, akan tetapi dari beberapa user thread dapat menggunakan satu kernel thread saja.
Contoh :
Solaries Green Thread
GNU Portable Thread

2. One-to-One 
Setiap user-level thread memetakan ke kernel thread, akan tetapi user thread hanya dapat menggunakan satu kernel thread.
Contoh :
Windows NT/XP/2000
Linux
Solaris 9 and later

3. Many-to-Many
Mengijinkan beberapa user-level thread memakai beberapa kernel thread.
Mengijinkan system operasi untuk menciptakan beberapa kernel thread.
Keuntungan dari sistem ini ialah kernel thread yang bersangkutan dapat berjalan secara paralel pada multiprosessor.

Keuntungan Thread
Terdapat empat keuntungan utama dari program yang multithreading yaitu sebagai berikut:

1. Responsiveness
Membuat aplikasi yang interakti' menjadi
multithreading dapat membuat sebuah program terus berjalan meski pun sebagian dari program tersebut diblok atau melakukanoperasi yang panjang, karena itu dapat meningkatkan respons kepada user. Sebagai contohnya dalam web browser yang multithreading, sebuah thread dapat melayani permintaan user sementara thread lain berusaha menampilkan image.

2. Resource Sharing
Thread berbagi memori dan sumber daya dengan thread lain yang dimiliki oleh proses yang sama. Keuntungan dari berbagi kode adalah mengi8inkan sebuah aplikasi untuk mempunyai beberapa thread yang berbeda dalam lokasi memori yang sama.

3. Economy
Dalam pembuatan sebuah proses banyak dibutuhkan pengalokasian memori dansumber daya. Alternatifnya adalah dengan user thread, karena thread berbagi memori dan sumber daya proses yang memilikinya maka akan lebih ekonomis untuk membuat dan context switch thread. Akan sulit untuk mengukur perbedaan waktu antara proses dan thread dalam hal pembuatan dan pengaturan, tetapi secara umum pembuatan dan pengaturan proses lebih lama dibandingkan thread. Pada Solaris, pembuatan proses lebih lama 24 kali dibandingkan pembuatan thread, dan context switch proses 5 kali lebih lama dibandingkan context switch thread.

4. Utilization of multiprocessor architectures
Keuntungan dari multithreading dapat sangat meningkat pada arsitektur
multiprocessor, dimana setiap thread dapat berjalan secara pararel di atas processor yang berbeda. Pada arsitektur processor tunggal, CPU menjalankan setiap thread secara bergantian tetapihal ini berlangsung sangat cepat sehingga menciptakan ilusi pararel, tetapi padakenyataannya hanya satu thread yang dijalankan CPU pada satu-satuan waktu (satu-satuan waktu pada CPU biasa disebut time slice atau quantum).

Thread Programming
Thread di Linux

-GNU/Linux menggunakan POSIX Standar Thread API
     -Dikenal dengan pthread
-Program dengan thread harus di-compile dengan "-lpthread"
  contoh : gcc testhread.c -o thread -lpthread

Program diidentifikasikan dengan thread ID
  -Type data : pthread_t

Fungsi-fungsi programming pthread :

1) pthread_t = tipe data thread
2) pthread_mutex_t = tipe data mutex thread
3) pthread_create = int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg);
    Parameter : Pertama-->thread ID
                        Kedua----->thread atribut (NULL untuk default atribut)
           Ketiga----->thread yang ingin dijalankan
                        Keempat-->parameter untuk fungsi yang dijalankan
Fungsi yang digunakan untuk menciptakan thread baru dalam suatu proses dengan atribut ditentukan oleh attr. Jika attr diisi NULL, atribut default akan dimuat. Jika pemanggilan fungsi berhasil, fungsi akan menyimpan ID dari thread ciptaan pada rujukan yang ditunjuk thread

4) pthread_detach = int pthread_detach(pthread_t thread);
Fungsi ini digunakan untuk mengindikasikan pada implementasi bahwa ruang penyimpanan thread pada thread bisa diminta kembali ketika thread berakhir

5) pthread_cancel = int pthread_cancel(pthread_t thread);
Fungsi ini digunakan untuk meminta agar thread dibatalkan. Kondisi kemampuan membatalkan dan tipedari thread yang dituju menentukan kapan pembatlan terjadi.

6) pthread_mutex_lock = int pthread_mutex_lock(pthread_mutex_t *mutex);
Fungsi ini digunakan untuk mengunci objek mutex yang dirujuk oleh mutex. Jika mutex sudah dikunci, thrad pemanggil akan ditahan hingga mutex menjadi tersedia (tidak terkunci). Operasi ini mengembalikan objek mutex yang dirujuk oleh mutex pada keadaan terkunci dengan thread pemanggil sebagai pemiliknya

7) pthread_mutex_unlock = int pthread_mutex_unlock(pthread_mutex_t *mutex);
Fungsi ini berguna untuk membebaskan objek mutex yang dirujuk mutex. Bagaimana cara mutex dibebaskan tergantung dari tipe atribut mutex

8) pthread_mutex_destroy = int pthread_mutex_destroy(pthread_mutex_t *mutex);
Fungsi ini menghancurkan objek mutex yang dirujuk oleh mutex, sehingga objek tersebut menjadi tidak terinisialisasi.




Source by:

http://ebook.repo.mercubuana-yogya.ac.id/FTI/tugas_doc_20151/14121004-SIF50_P_5-SO_Artikel%20Thread_SI_21_14121004_Adito%20Efri.pdf

http://www.academia.edu/30582405/MAKALAH_SISTEM_OPERASI_THREAD_Pengertian_Thread

http://world-just-for-you.blogspot.com/2014/11/thread-proses-dan-thread-programming.html