Senin, 17 Oktober 2011

Konsep Thread

KONSEP THREAD

Thread 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. Thread juga sering disebut lightweight process.

border=0 v:shapes="BLOGGER_PHOTO_ID_5460301140737715954">



Gambar Thread

Keuntungan Thread

• Responsif

• Berbagai sumber daya

• Ekonomis

• Utilisasi arsitektur multiprosessor







THREAD KERNEL

Thread kernel didukung langsung oleh sistem operasi. Pembuatan, penjadwalan, dan manajemen thread dilakukan oleh kernel pada kernel space. Thread diatur oleh kernel, karena itu jika sebuah thread menjalankan blocking system call maka kernel dapat menjadwalkan thread lain di aplikasi untuk melakukan eksekusi. 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.





Fork dan Exec System Call

Jika fork dipanggil oleh salah satu thread dalam proses:



1. Semua thread diduplikasi.

2. Hanya thread yang memanggil fork.

Jika Thread memanggil exec system call maka program yang dispesifikasi di parameter exec akan mengganti keseluruhan proses termasuk thread dan LWP.

Thread Cancellation

Thread cancellation adalah pemberhentian thread sebelum tugasnya selesai.

Pemberhentian target thread dapat terjadi melalui dua cara yang berbeda :

1. Asynchronous cancellation: suatu thread seketika itu juga memberhentikan target thread.

2. Defered cancellation: target thread secara perodik memeriksa apakah dia harus berhenti, cara ini memperbolehkan target thread untuk memberhentikan dirinya sendiri secara terurut.

Thread Kernel Linux

Linus Torvalds mendefinisikan bahwa sebuah thread adalah Context of Execution (COE), yang berarti bahwa hanya ada sebuah Process Control Block (PCB) dan sebuah penjadwal yang diperlukan. Linux tidak mendukung multithreading,struktur data yang terpisah, atau pun rutin kernel. Linux menyediakan 2 system call yaitu fork dan clone. Fork memiliki fungsi untuk menduplikasi proses dimana proses anak yang dihasilkan bersifat independent. clone memiliki sifat yang mirip dengan fork yaitu sama-sama membuat duplikat dari proses induk.





Secara informal; proses adalah program dalam eksekusi. Suatu proses adalah lebih dari kode program, dimana kadang kala dikenal sebagai bagian tulisan. Proses juga termasuk aktivitas yang sedang terjadi, sebagaimana digambarkan oleh nilai pada program counter dan isi dari daftar prosesor/ processor’s register. Suatu proses umumnya juga termasuk process stack, yang berisikan data temporer (seperti parameter metoda, address yang kembali, dan variabel lokal) dan sebuah data section, yang berisikan variabel global.

Thread adalah sebuah alur kontrol dari sebuah proses. Suatu proses yang multithreaded mengandung beberapa perbedaan alur kontrol dengan ruang alamat yang sama. Keuntungan dari multithreaded meliputi peningkatan respon dari user, pembagian sumber daya proses, ekonomis, dan kemampuan untuk mengambil keuntungan dari arsitektur multiprosesor. User level thread adalah thread yang tampak oleh programmer dan tidak diketahui oleh kernel. User level thread secara tipikal dikelola oleh sebuah library thread di ruang user. Kernel level thread didukung dan dikelola oleh kernel sistem operasi. Secara umum, user level thread lebih cepat dalam pembuatan dan pengelolaan dari pada kernel thread. Ada tiga perbedaan tipe dari model yang berhubungan dengan user dan kernel thread.

Model many to one: memetakan beberapa user level thread hanya ke satu buah kernel thread.

Model one to one: memetakan setiap user thread ke dalam satu kernel thread. Berakhir.

Model many to many: mengizinkan pengembang untuk membuat user thread sebanyak mungkin, konkurensi tidak dapat tercapai karena hanya satu thread yang dapat dijadualkan oleh kernel dalam satu waktu.

Mutual Exclusion adalah Suatu kondisi dimana setiap sumber daya diberikan tepat pada satu proses pada suatu waktu (kondisi-kondisi untuk solusi). Tiga kondisi untuk menentukan mutual Exclusion diantaranya :

Tidak ada dua proses yang pada saat bersamaan berada di critical region.
Tidak ada proses yang berjalan diluar critical region yang bisa menghambat proses lain
Tidak ada proses yang tidak bisa masuk ke critical region

Race Condition adalah situasi di mana beberapa proses mengakses dan memanipulasi data bersama pada saat besamaan. Nilai akhir dari data bersama tersebut tergantung pada proses yang terakhir selesai. Unutk mencegah race condition, proses-proses yang berjalan besamaan haus di disinkronisasi.

Sinkronisasi adalah Komunikasi antara proses yang membutuhkan place by calls untuk mengirim dan menerima data primitive. Terdapat rancangan yang berbeda-beda dalam implementasi setiap primitive. Pengiriman pesan mungkin dapat diblok (blocking) atau tidak dapat dibloking (nonblocking) – juga dikenal dengan nama sinkron atau asinkron.

Deadlock ialah suatu kondisi permanen dimana proses tidak berjalan lagi ataupun tidak ada komunikasi lagi antar proses. Deadlock disebabkan karena proses yang satu menunggu sumber daya yang sedang dipegang oleh proses lain yang sedang menunggu sumber daya yang dipegang oleh proses tersebut. Atau dengan kata lain setiap proses dalam set menunggu untuk sumber yang hanya bisa dikerjakan oleh proses lain dalam set yang sedang menunggu.

Starvation adalah suatu proses meninggalkan critical section dan lebih dari satu proses menunggu (waiting).Beberapa proses dapat ditolak aksenya dalam waktu tak terbatas.

Monitor adalah kumpulan prosedur, variabel dan struktur data di satu modul atau paket khusus. Proses dapat memanggil prosedur-prosedur kapan pun diinginkan. Tapi proses tak dapat mengakses struktur data internal dalam monitor secara langsung. Hanya lewat prosedur-prosedur yang dideklarasikan minitor untuk mengakses struktur internal.

Semaphore adalah pendekatan yang diajukan oleh Djikstra, dengan prinsip bahwa dua proses atau lebih dapat bekerja sama dengan menggunakan penanda-penanda sederhana. Seperti proses dapat dipaksa berhenti pada suatu saat, sampai proses mendapatkan penanda tertentu itu. Sembarang kebutuhan koordinasi kompleks dapat dipenuhi dengan struktur penanda yang cocok untuk kebutuhan itu. Variabel khusus untuk penanda ini disebut semaphore.Semaphore mempunyai dua sifat, yaitu:

Semaphore dapat diinisialisasi dengan nilai non-negatif.
Terdapat dua operasi terhadap semaphore, yaitu Down dan Up. Usulan asli yang disampaikan Djikstra adalah operasi P dan V.

Thread merupakan kemampuan yang disediakan oleh Java untuk membuat

aplikasi yang tangguh, karena thread dalam program memiliki fungsi dan tugas

tersendiri. Dengan adanya thread, dapat membuat program yang lebih efisien dalam

hal kecepatan maupun penggunaan sumber daya, karena kita dapat membagi proses

dalam aplikasi kita pada waktu yang sama. Thread umumnya digunakan untuk

pemrograman multitasking, networking, yang melibatkan pengaksesan ke sumber

daya secara konkuren.

Ada dua cara yang bisa digunakan dalam membuat sebuah thread, yaitu :

Membuat subclass dari thread

Untuk menjalankan thread, dapat dilakukan dengan memanggil method

start(). Saat start() dijalankan, maka sebenarnya method run() dari class akan

dijalankan. Jadi untuk membuat thread, harus mendefinisikan method run()

pada definisi class. Konstruktor dari cara ini adalah :

ClassThread namavar = new ClassThread();

Namavar.start();

Atau dapat juga langsung dengan cara:

New ClassThread().start();

Mengimplementasikan interface Runnable

Cara ini merupakan cara yang paling sederhana dalam membuat thread.

Runnable merupakan unit abstrak, yaitu kelas yang mengimplementasikan

interface ini hanya cukup mengimplementasikan fungsi run(). Dalam

mengimplementasi fungsi run(), kita akan mendefinisikan instruksi yang

membangun sebuah thread. Konstruktor dari cara ini adalah :

ObjekRunnable objek = new ObjekRunnable();

Thread namavar = new Thread(Objek Runnable);

Atau dengan cara singkat seperti :

New Thread(new ObjekRunnable());

A. Daemon Dan User Thread

Ada dua Macam thread dalam Java, yaitu daemon dan user thread. Daemon

thread merupakan thread yang siklus hidupnya tergantung pada thread utama atau

induk, sehingga apabila thread induk berakhir, maka otomatis thread-thread daemon



juga ikut berakhir. Sedangkan user thread memiliki sifat berbeda, dimana apabila

thread utama sudah selesai, maka user thread akan terus dijalankan.

B. Sleep

Mengatur thread untuk menghentikan prosesnya sejenak dan memberi

kesempatan pada thread atau proses lain. Sleep dilakukan dengan cara memanggil

method :

Sleep(long waktu);

Waktu untuk method ini merupakan tipe long dalam milisekon.

C. Interrupt

Apabila menginginkan suatu thread untuk menghentikan proses, maka perlu

memanggil method interrupt. Interrupt digunakan untuk memberi signal pada thread

untuk menghentikan prosesnya.

Latihan 36. Thread.java

class ThreadBaru extends Thread {

public ThreadBaru(String id) {

super(id);

start(); //Mulai eksekusi thread baru

}

public void run() {

for(int i=0;i

try{

Thread.sleep(100);

}catch(InterruptedException e) {}

}

}

}

class DemoThread {

public static void main(String[] args) {

ThreadBaru thread1 = new ThreadBaru("Thread1");

ThreadBaru thread2 = new ThreadBaru("Thread2");

ThreadBaru thread3 = new ThreadBaru("Thread3");

System.out.println("Thread1 masih dieksekusi : " + thread1.isAlive());

System.out.println("Thread2 masih dieksekusi : " + thread2.isAlive());



System.out.println("Thread3 masih dieksekusi : " + thread3.isAlive());

//tunggu hingga semua child thread selesai dieksekusi

try{

thread1.join();

System.out.println("Thread1 selesai dieksekusi");

thread2.join();

System.out.println("Thread2 selesai dieksekusi");

thread3.join();

System.out.println("Thread3 selesai dieksekusi");

}catch(InterruptedException e) {

System.out.println("Thread utama diinterupsi " + e);

}

System.out.println("Thread utama selesai dieksekusi");

}

}

D. Synchronized

Sinkronisasi adalah method atau blok yang memiliki tambahan keyword

synchronized, sehingga apabila dijalankan maka hanya satu thread pada suatu waktu

yang dapat menjalankan method atau blok program. Thread lain akan menunggu

thread yang sedang mengeksekusi method ini hingga selesai. Mekanisme sinkronisasi

penting apabila terjadi pembagian sumber daya maupun data di antara thread-thread.

Sinkronisasi juga melakukan penguncian pada sumber daya atau data yang sedang

diproses.

ThreadSinkronisasi.java

class TestSinkronisasi {

private java.util.Random random = new java.util.Random();

public void callMe(String data) {

System.out.print("[");



try{

Thread.sleep(random.nextInt(200));

}catch(InterruptedException e) {

e.printStackTrace();

}

System.out.print(data);

try{

Thread.sleep(random.nextInt(200));

}catch(InterruptedException e) {

e.printStackTrace();

}

System.out.println("]");

}

}

class ThreadBaru extends Thread {

private String data;

private TestSinkronisasi obj;

public ThreadBaru(TestSinkronisasi obj,String data) {

this.obj = obj;

this.data = data;

start();

}

public void run() {

obj.callMe(data);

}

}

class DemoThread {

public static void main(String[] args) {

TestSinkronisasi obj = new TestSinkronisasi();

ThreadBaru thread1 = new ThreadBaru(obj,"Superman");

ThreadBaru thread2 = new ThreadBaru(obj,"Batman");

ThreadBaru thread3 = new ThreadBaru(obj,"Spiderman");

//tunggu hingga semua child thread selesai dieksekusi

try{

68

thread1.join();

thread2.join();

thread3.join();

}catch(InterruptedException e) {

System.out.println("Thread utama diinterupsi " + e);

}

(Copas dari blog yg ada)

Tidak ada komentar:

Posting Komentar