Laman

Senin, 25 Oktober 2010

Process States dan Thread States


Proses adalah satu kejadian dari satu program komputer yang itu dilaksanakan. Sementara satu program sendiri baru satu koleksi pasif dari arahan, satu adalah proses pelaksanaan nyata dari arahan tersebut. Beberapa proses mungkin dihubungkan dengan program yang sama masing-masing akan melaksanakan dengan mandiri (penguliran ganda dimana masing-masing susup mewakili satu proses), yang manapun synchronously (secara sekuen) atau asynchronously (di dalam paralel). Mesin komputer modern mengijinkan beberapa program dan proses diisi ke dalam ingatan pada waktu yang sama dan, melalui berbagi waktu (atau banyak tugas), berikan satu penampilan yang itu mereka dilaksanakan pada waktu yang sama (secara bersamaan) sekalipun di situ adalah baru seperti prosesor. Dengan cara yang sama, mempergunakan satu penguliran ganda OS dan / atau arsitektur komputer, proses paralel dari program yang sama Mei sebenarnya laksanakan secara serempak (pada Cpu berbeda) pada satu beberapa mesin CPU atau jaringan.
Proses membicarakan secara tuntas berbagai proses menyatakan yang menentukan bagaimana adalah proses ditangani oleh daging buah sistem operasi. Implementasi spesifik dari status ini bervariasi di dalam sistem operasi berbeda, dan nama-nama dari status ini tidak standar, tapi umum pada taraf yang tinggi kemampuan jadi sama. 
Ketika satu adalah proses ciptakan, ini perlu menantikan penjadwal proses untuk menyetel status nya ke "penantian" dan mengisinya ke dalam ingatan utama dari peralatan penyimpanan sekunder (seperti itu satu cakram keras penyimpan data atau satu CD-ROM). Satu kali proses telah ditugaskan ke satu prosesor oleh satu penjadwal jangka pendek, satu adalah tombol hubungan kalimat terlaksana (mengisi proses ke dalam prosesor) dan adalah status proses mulai "berlari" - darimana prosesor melaksanakan arahan nya. Kalau satu proses perlukan untuk menantikan satu sumber daya (seperti itu nantikan pengguna masuki, atau nantikan satu file untuk menjadi siap), digerakkan ke dalam "dihalangi" status hingga ini tidak lagi perlu untuk menunggu maka ini dimundurkan ke dalam "penantian" status. Satu kali pelaksanaan selesai proses, atau adalah yang diakhiri oleh sistem operasi, digerakkan ke "diakhiri" nyatakan kemana masa penantian nya disingkirkan dari ingatan utam.

Thread, atau kadang-kadang disebut proses ringan (lightweight), adalah unit dasar dari utilisasi CPU. Di dalamnya terdapat ID thread, program counter, register, dan stack. Dan saling berbagi dengan thread lain dalam proses yang sama. Secara informal, proses adalah program yang sedang dieksekusi. Ada dua jenis proses, proses berat (heavyweight) atau biasa dikenal dengan proses tradisional, dan proses ringan atau kadang disebut thread. Thread saling berbagi bagian program, bagian data dan sumber daya sistem operasi dengan thread 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.



Keuntungan
1. Tanggap: Multithreading mengizinkan program untuk berjalan terus walau pun pada bagian program tersebut di block atau sedang dalam keadaan menjalankan operasi yang lama/ panjang. Sebagai contoh, multithread web browser dapat mengizinkan pengguna berinteraksi dengan suatu thread ketika suatu gambar sedang diload oleh thread yang lain.
2. Pembagian sumber daya: Secara default, thread membagi memori dan sumber daya dari proses. Keuntungan dari pembagian kode adalah aplikasi mempunyai perbedaan aktifitas thread dengan alokasi memori yang sama.
3. Ekonomis: Mengalokasikan memori dan sumber daya untuk membuat proses adalah sangat mahal. Alternatifnya, karena thread membagi sumber daya dari proses, ini lebih ekonomis untuk membuat threads.
4. Pemberdayaan arsitektur multiprosesor: Keuntungann dari multithreading dapat ditingkatkan
dengan arsitektur multiprosesor, dimana setiap thread dapat jalan secara parallel pada prosesor yang berbeda. Pada arsitektur prosesor tunggal, CPU biasanya berpindah-pindah antara setiap thread dengan cepat, sehingga terdapat ilusi paralelisme, tetapi pada kenyataannya hanya satu thread yang berjalan di setiap waktu.

Semua program java mempunyai paling sedikit satu kontrol thread. Bahkan program java yang sederhana mempunyai hanya satu main() method yang berjalan dalam thread tunggal dalam JVM. Java menyediakan perintah-perintah yang mendukung pengembang untuk membuat dan memanipulasi kontrol thread pada program. Satu cara untuk membuat thread secara eksplisit adalah dengan membuat kelas baru yang diturunkan dari kelas thread, dan menimpa run() method dari kelas Thread tersebut. Object yang diturunkan dari kelas tersebut akan menjalankan sebagian thread control dalam JVM. Bagaimana pun, membuat suatu objek yang diturunkan dari kelas Thread tidak secara spesifik membuat thread baru, tetapi start() method lah yang sebenarnya membuat thread baru. Memanggil start() method untuk objek baru mengalokasikan memori dan menginisialisasikan thread baru dalam JVM dan memanggil run() method membuat thread pantas untuk dijalankan oleh JVM. (Catatan: jangan pernah memanggil run() method secara langsung. Panggil start() method dan ini secara langsung akan memanggil run() method).
Ketika program ini dijalankan, dua thread akan dibuat oleh JVM. Yang pertama dibuat adalah thread yang berasosiasi dengan aplikasi-thread tersebut mulai dieksekusi pada main() method. Thread kedua adalah runner thread secara ekspilisit dibuat dengan start() method. Runner thread memulai eksekusinya dengan run() method. Pilihan lain untuk membuat sebuah thread yang terpisah adalah dengan mendefinisikan suatu kelas yang mengimplementasikan runnable interface. Runnable interface tersebut didefinisikan sebagai berikut:

Gambar 2-23. Runnable. Sumber: . . .
Public interface Runnable
{
Public abstract void run();
}
Sehingga, ketika sebuah kelas diimplementasikan dengan runnable, kelas tersebut harus mendefinisikan run() method. Kelas thread yang berfungsi untuk mendefinisikan static dan instance method, juga mengimplementasikan runnable interface. Itu menerangkan bahwa mengapa sebuah kelas diturunkan dari thread harus mendefinisikan run() method. Implementasi dari runnable interface sama dengan mengekstend kelas thread, satu-satunya kemungkinan untuk mengganti "extends thread" dengan "implements runnable".

Gambar 2-24. ClassWorker2. Sumber: . . .
Class worker2 implements Runnable
{
Public void run() {
System. Out. Println ("I am a worker thread. ");
}
}
Membuat sebuah thread dari kelas yang diimplementasikan oleh runnable berbeda dengan membuat thread dari kelas yang mengekstend thread. Selama kelas baru tersebut tidak mengekstend thread, dia tidak mempunyai akses ke objek static atau instance method — seperti start() method— dari kelas thread. Bagaimana pun, sebuah objek dari kelas thread adalah tetap dibutuhkan, karena yang membuat sebuah thread baru dari kontrol adalah start() method. Di kelas kedua, sebuah objek thread baru dibuat melalui runnable objek dalam konstruktornya. Ketika thread dibuat oleh start() method, thread baru mulai dieksekusi pada run() method dari runnable objek. Kedua method dari pembuatan thread tersebut adalah cara yang paling sering digunakan.

Keadaan Thread
Sebuah thread java dapat menjadi satu dari 4 kemungkinan keadaan:
1. new: sebuah thread pada keadaan ini ada ketika objek dari thread tersebut dibuat.
2. runnable: memanggil start() method untuk mengalokasikan memori bagi thread baru dalam JVM dan memanggil run() method untuk membuat objek.
3. block: sebuah thread akan diblok jika menampilkan sebuah kalimat pengeblokan. Contohnya:
sleep() atau suspend().
4. dead: sebuah thread dipindahkan ke keadaan dead ketika run() method berhenti atau ketika stop() method dipanggil.
 

Diagram Thread Java

Tidak ada komentar:

Posting Komentar