Konsep Thread
Definisi (1) Merupakan sebuah status eksekusi (running, ready, dll.) Sering disebut dengan lightweight process Merupakan unit dasar dari penggunaan CPU, yang terdiri dari Thread_ID, program counter, register set, dan stack. Sebuah thread berbagi code section, data section, dan sumber daya sistem operasi dengan Thread lain yang dimiliki oleh proses yang sama.
Definisi (2) Single-threading Sebuah proses tradisional atau heavyweight process mempunyai thread tunggal yang berfungsi sebagai pengendali. Multi-threading threading Sebuah proses dengan thread yang banyak dan mengerjakan lebih dari satu tugas pada satu satuan waktu.
Single dan Multi-Threading
Contoh (1) Pada umumnya, perangkat lunak yang berjalan pada komputer modern dirancang secara multi-threading threading. Sebuah aplikasi biasanya diimplementasi sebagai proses yang terpisah dengan beberapa thread yang berfungsi sebagai pengendali. Contohnya sebuah web browser mempunyai thread untuk menampilkan gambar atau tulisan sedangkan thread yang lain berfungsi sebagai penerima data dari internet.
Contoh (2) Terkadang ada sebuah aplikasi yang perlu menjalankan beberapa tugas yang serupa. Sebagai contohnya sebuah web server dapat mempunyai ratusan klien yang mengaksesnya secara bersamaan. Jika web server berjalan sebagai proses yang memiliki thread tunggal (Single-threading) maka ia hanya dapat melayani satu klien pada pada satu waktu. Bila ada klien lain yang ingin mengajukan permintaan maka ia harus menunggu sampai klien sebelumnya selesai dilayani.
Contoh (3) Solusinya adalah dengan membuat web server menjadi multi-threading threading. Dengan ini maka sebuah web server akan membuat thread yang akan mendengar permintaan klien, ketika permintaan lain diajukan maka web server akan menciptakan thread lain yang akan melayani permintaan tersebut.
Benefit Responsiveness Resource Sharing Economy Utilization of Multi-Processor Architectures
Thread dalam Sistem Operasi Sistem operasi telah mendukung proses multithreading. Setiap sistem operasi memiliki konsep tersendiri dalam pengimplementasiannya. Sistem operasi dapat mendukung thread pada tingkatan kernel maupun tingkatan pengguna.
Thread Pengguna (User Threads) Thread pengguna didukung kernel serta diimplementasikan dengan pustaka (library) thread pada tingkatan pengguna. Pustaka (library) menyediakan fasilitas untuk pembuatan thread, penjadwalan thread, dan manajemen thread tanpa dukungan dari kernel. Semua pembuatan dan penjadwalan thread dilakukan dalam ruang pengguna tanpa campur tangan kernel. Thread pengguna biasanya dapat cepat dibuat dan dikendalikan
Thread Kernel (Kernel Threads) Thread kernel didukung langsung oleh sistem operasi. Pembuatan, penjadwalan, dan manajemen thread dilakukan oleh kernel pada kernel space. Pengaturan thread dilakukan oleh sistem operasi, sehingga pembuatan dan pengaturan kernel thread lebih lambat dibandingkan user thread.
Model Multi-threading threading Many-to to-one One-to to-one Many-to to-many
Many-to to-one Memetakan beberapa thread tingkatan pengguna ke sebuah thread tingkatan kernel. Pengaturan thread dilakukan dalam ruang pengguna, sehingga efisien. Hanya satu thread pengguna yang dapat mengakses thread kernel pada satu saat.
One-to to-one Memetakan setiap thread tingkatan pengguna ke thread kernel. Model ini menyediakan lebih banyak concurrency dibandingkan model Many-to to-one.
Many-to to-many Mengelompokkan banyak thread pengguna untuk dipetakan ke thread kernel yang jumlahnya lebih sedikit atau sama dengan tingkatan pengguna. Mengijinkan sistem operasi untuk membuat sejumlah thread kernel.
Penggunaan Thread (1) Model Many-to to-one mengizinkan developer untuk membuat user thread sebanyak yang ia mau tetapi concurrency tidak dapat diperoleh karena hanya satu thread yang dapat dijadwal oleh kernel pada suatu waktu. Model One-to to-one menghasilkan concurrency yang lebih tetapi developer harus hati-hati untuk tidak menciptakan terlalu banyak thread dalam suatu aplikasi (dalam beberapa hal,, developer hanya dapat membuat thread dalam jumlah yang terbatas).
Penggunaan Thread (2) Model Many-to to-many tidak memiliki kelemahan seperti kedua model sebelumnya. Developer dapat membuat user thread sebanyak yang diperlukan, dan kernel thread yang bersangkutan dapat berjalan secara pararel pada multiprocessor. Jika suatu ketika thread menjalankan blocking system call maka kernel dapat menjadwalkan thread lain untuk melakukan eksekusi.
Thread Cancellation (1) Thread cancellation ialah pemberhentian thread sebelum tugasnya selesai. Misalnya jika dalam program Java hendak mematikan Java Virtual Machine (JVM). Sebelum JVM dimatikan, maka seluruh thread yang berjalan harus dihentikan terlebih dahulu. Thread yang akan diberhentikan disebut sebagai target thread.
Thread Cancellation (2) Pemberhentian target thread dapat terjadi melalui dua cara yang berbeda: Asynchronous cancellation: suatu thread seketika itu juga memberhentikan target thread. Deferred cancellation: : target thread secara perodik memeriksa apakah dia harus berhenti, cara ini memperbolehkan target thread untuk memberhentikan dirinya sendiri secara terurut.
Thread Pools Thread Pools adalah cara kerja dengan membuat beberapa thread pada proses startup dan menempatkan mereka ke pools.
Contoh Thread Pools (1) Pada web server yang multithreading ada dua masalah yang timbul : Ukuran waktu yang diperlukan untuk menciptakan thread untuk melayani permintaan yang diajukan terlebih pada kenyataannya thread dibuang ketika ia seketika sesudah ia menyelesaikan tugasnya. Pembuatan thread yang tidak terbatas jumlahnya dapat menurunkan performa dari sistem.
Contoh Thread Pools (2) Solusinya adalah dengan penggunaan Thread Pools. Cara kerjanya adalah dengan membuat beberapa thread pada proses startup dan menempatkan mereka ke pools. Jadi ketika server menerima permintaan maka maka ia akan membangunkan thread dari pool dan jika thread tersedia maka permintaan tersebut akan dilayani.
Contoh Thread Pools (3) Ketika thread sudah selesai mengerjakan tugasnya maka ia kembali ke pool dan menunggu pekerjaan lainnya. Bila tidak thread yang tersedia pada saat dibutuhkan maka server menunggu sampai ada satu thread yang bebas.
Keuntungan Thread Pools Biasanya lebih cepat untuk melayani permintaan dengan thread yang ada dibanding dengan menunggu thread baru dibuat. Thread pool membatasi jumlah thread yang ada pada suatu waktu.. Hal ini penting pada sistem yang tidak dapat mendukung banyak thread yang berjalan secara concurrent.