Assalamualaikum...

Sabtu, 03 Mei 2014

Ilustrasi Thread Dengan Linux dan Java

Ilustrasi Thread Dengan Linux dan Java

Dewasa ini, banyak sistem operasi yang telah mendukung proses multi threading. Setiap sistem operasi memiliki konsep tersendiri dalam mengimplementasikannya dalam sistem.

Thread dengan Linux

Kernel Linux mulai menggunakan thread pada versi 2.2. Thread dalam Linux dianggap sebagai task , seperti halnya proses. Linux tidak mendukung multithreading, struktur data yang terpisah, atau pun kernel routines .

Setiap proses memiliki struktur data yang unik. Namun demikian, proses-proses di Linux hanya menyimpan pointer-pointer ke struktur data lainnya dimana instruksi disimpan, sehingga tidak harus menyimpan instruksi ke setiap struktur data yang ada. Hal ini menyebabkan context switch antar proses di Linux menjadi lebih cepat.

Ketika fork dieksekusi, sebuah proses baru dibuat bersamaan dengan proses penyalinan struktur data dari proses induk. Ketika clone dieksekusi, sebuah proses baru juga dibuat, namun proses tersebut tidak menyalin struktur data dari proses induknya. Proses baru tersebut hanya menyimpan pointer ke struktur data proses induk. Oleh karena itu, proses anak dapat berbagi ruang alamat dan sumber daya dengan proses induknya. Satu set flag digunakan untuk mengindikasikan seberapa banyak kedua proses tersebut dapat berbagi. Jika tidak ada flag yang ditandai, maka tidak ada sharing, sehingga clone berlaku sebagai fork. Jika kelima flag ditandai, maka proses induk harus berbagi semuanya dengan proses anak.


Tabel 3-1. Tabel Flag dan Fungsinya











Thread dengan Java

Sistem operasi mendukung thread pada tingkat kernel atau tingkat user . Java merupakan salah satu dari sejumlah kecil bahasa pemrograman yang mendukung thread di tingkat bahasa untuk pembuatan dan manajemen thread. Karena thread dalam Java diatur oleh Java Virtual Machine (JVM), tidak dengan user-level library ataupun kernel, sulit mengelompokkan thread di Java apakah di tingkat user atau kernel.

Setiap program dalam Java memiliki sedikitnya sebuah thread yaitu main yang merupakan single-thread tersendiri di JVM. Java juga menyediakan perintah untuk membuat dan modifikasi thread tambahan sesuai kebutuhan di dalam program.

Pembuatan Thread

Salah satu cara membuat thread secara eksplisit yaitu dengan membuat objek baru dari class yang telah meng- extends class Thread. Cara lain adalah dengan meng- override method run dari interface Runnable.

Sebuah objek yang berasal dari subkelas Thread dapat dijalankan sebagai kontrol thread yang terpisah dalam JVM. Membuat objek dari class Thread tidak akan membuat thread baru. Akan tetapi dengan method start akan terbentuk thread baru. Memanggil method start untuk objek baru akan mengakibatkan 2 hal, yaitu: 


1. Mengalokasikan memori dan menginisialisasi sebuah thread baru dalam JVM. 

2. Memanggil method run, membuat thread dapat dijalankan oleh JVM (Catatan: Method run dijalankan jika method start dipanggil. Memanggil method run secara langsung hanya menghasilkan single-thread tambahan selain main)

Contoh membuat thread dengan membuat objek baru dari class yang meng- extends class Thread :

      









JVM dan Host Operating System

Implementasi umum dari JVM adalah di atas sebuah host operating system . Hal ini memungkinkan JVM untuk menyembunyikan implemnetasi detail dari sistem operasi tempat JVM dijalankan dan menyediakan lingkungan abstrak dan konsisten yang memungkinkan program-program Java untuk beroperasi di atas paltform apa pun yang mendukung JVM. Spesifikasi untuk JVM tidak mengindikasikan bagaimana thread-thread Java dipetakan ke sistem operasi tempat JVM dijalankan, melainkan menyerahkan keputusan tersebut kepada implementasi tertentu dari JVM. Windows 95/98/NT/2000 menggunakan model One-to-One , sehingga setiap thread Java untuk JVM pada sistem operasi tersebut dipetakan kepada sebuah thread kernel. Solaris 2 awalnya mengimplementasikan JVM menggunakan model Many-to-One (disebut Green Threads . Akan tetapi, sejak JVM versi 1.1 dengan Solaris 2.6, mulai diimplementasikan menggunakan model Many-to-Many .