TINJAUAN KONSEP MULTITHREADING
BAHASA PEMROGRAMAN JAVA
DAN BORLAN C++
Bekti Ratna Timur Astuti
ABSTRACT
One is the use of computer technology as a tool in working manuasia tasks. Where at one time can work simultaneously. So then comes the idea to develop the concept of multithreading.
Multithreading programs is the same as threading a single program, the difference is only in the workmanship. Multithreding able to support more than one task at hand at the same time, or in other words able to do some instruction sequences simultaneously. Each instruction sequences or sequences have their own uniqueness in terms of flow control independent of each other. Independent instructions is what is meant by threads or the sequence of tasks. A computer has one CPU, can do more than one task at a time.
The things that are important in multithreaded programs is that the logical concurency multithreading support, not whether physical concurency actually received. Multithreading do something in the context of competition tasks single process among several different processes (multiple processes). An threads or tasks is not a task to complete the process itself. Threads is a line of control that occurs in a process.
A. PENDAHULUAN
Dengan berkembangnya teknologi yang sangat pesat, computer merupakan suatu alat yang dapat menjawab tantangan dunia sekarang dan yang akan datang. Teknologi komputer setiap saat selalu berkembang mengikuti perkembangan jaman. Orang menggunakan komputer tidak saja sekedar untuk menyelesaikan pekerjaannya, tetapi bisa menggunakan komputer secara optimal, yaitu dari segi waktu dan tenaga, untuk itu dibutuhkan suatu program dimana pemakainnya dapat mengerjakan lebih dari satu pekerjaan secara bersamaan.
Multithreading bukanlah konsep baru dalam perangkat lunak, namun baru mulai diperhitungkan. Orang-orang telah bereksperimen untuk mengimplementasikan selama bertahun-tahun, tetapi baru akhir-akhir ini saja perangkat keras desktop (terutama multiprosesor desktop) mencadi cukup canggih untuk mempopolerkan Multithreading.
Program yang dimultithread memperluas ide multitasking. Program individual memiliki kemampuan menjalankan komputasi pada waktu yang sama. Program ( setiap komputasi biasanya disebut dengan thread. Thread kependekan dari ” thread kendali”. Program yang menjalankan lebih dari satu komputasi pada suatu saat disebut multithreaded). Setiap thread seperti berjalan dalam context terpisah : context membuat setiap thread seolah memiliki CPU sendiri dengan register, memori dan kode pengaksesan sendiri. Thread tidak terbatas untuk satu fungsi. Thread apapun dalam program multithreaded dapat memanggil serangkaian metode yang dapat dipanggil dalam program threaded tunggal. Thread sebenarnya dapat membuat program berjalan dengan lebih cepat, meskipun pada perangkat keras berprosesor tunggal. Ini terjadi pada saat ada langkah-langkah perhitungan yang tidak perlu lagi menunggu keluaran terdahulu diselesaikan, namun dapat berjalan pada saat proses I/O sedang berjalan. Pada perangkat lunak interaktif yang modern, menjalankan tugas tunggal sampai selesai sering kali tidak dapat diterima. Salah satu pemecahannya dengan membuat menjadi multithread, serta memiliki sebuah kendali thread untuk mengeksekusi setiap perintah. Ketika perintah itu mulai diberikan, perintah tersebut dapat langsung berjalan, sementara thread yang lain terus berjalan melayani antarmuka pemakai dan mendengarkan intruksi berikutnya dari pemakai. Multithreading sangat berguna misalnya browser harus memiliki kemampuan untuk menangani multiple host atau membuka window e-mail sambil memanggil lebih banyak data. Makalah ini membahas tentang perbandingan konsep multithreading pada bahasa pemrograman Java dengan Borlan C++
B. LANDASAN TEORI
Sebuah komputer mempunyai satu CPU, dapat mengerjakan lebih dari satu tugas pada saat yang bersamaan. Pada sistem prosesor tunggal, hanya satu tugas eksekusi berlangsung pada satu waktu yang singkat. CPU dengan cepat bergerak (maju atau mundur) diantara beberapa tugas untuk membuat ”ilusi” bahwa beberapa tugas sudah dikerjakan pada saat yang bersamaan. Sistem prosesor tunggal mendukung logika pengerjaan yang dikerjakan bersamaan, bukan tugas sebenarnya. Logical concurency, logika pengerjaan yang dikerjakan bersamaan adalah suatu karakteristik pekerjaan yang terjadi dimana beberapa tugas pekerjaan dikerjakan secara terpisah dengan alur kendali yang berbeda. Pada sistem multiprosesor, beberapa tugas benar-benar dikerjakan secara bersamaan. Hal-hal yang penting dalam program-program multithread adalah bahwa multithreading mendukung logical concurency, bukan apakah pysical concurency benar-benar diterima. Banyak bahasa-bahasa pemrograman mendukung multiprogramming. Multiprogramming adalah suatu proses pengerjaan logika konkuren pada beberapa program. Sebagai contoh sebuah program dapat meminta sistem operasi mengerjakan program A,B, dan C dengan prosesnya secara terpisah. Program-program ini dapat berjalan secara paralel, tergantung pada antar muka multiprogramming tersebut yang didukung oleh sistem operasinya. Multithreading berbeda dengan multiprogramming. Multithreading melakukan suatu konkurensi tugas dalam konteks proses tunggal diantara beberapa tugas yang berbeda (multi proses). Suatu threads atau tugas bukanlah suatu proses yang lengkap untuk dirinya sendiri. Threads merupakan suatu alur kendali yang terjadi dalam suatu proses.
Sebuah program yang dieksekusi umumnya diasosiasikan denagn suatu proses tunggal. Keuntungan multithreading adalah bahwa suatu konkurensi tugas dapat digunakan dalam sebuah proses untuk melakukan suatu pekerjaan lainnya kepada pemakai secara simultan. Dibanding dengan multiprogramming, multithreading lebih baik karena mampu mengurangi pemrosesan-pemrosesan yang berlebihan (overhead) karena tidak mampu membagi beberapa sesumber lebih mudah.
Multithreading Dalam Java
Bahasa Pemrograman Java menyediakan dukungan untuk thread melalui sebuah interface dan penanganan kelas-kelas. Java intercafe dan kelas-kelas yang menyertakan thread mempunyai fungsi sebagai thread, runnable, threaddead, threadgroup, object. Thread dalam java memiliki kemampuan untuk menggunakan kelebihan pada sistem multiprosesor. Implementasi multithreading dalam java diserahkan pada sistem operasi yang mendasarinya. Membuat thread dalam java dapat dilakukan dengan cara
1. Mendefinisikan sebuah kelas yang memperluas kelas thread. Hal ini dilakukan dengan menggunakan kata kunci extends
public class examplethread extents Thread
public void run() {
Keterangan :
Baris 1. Mendefinisikan sebuah kelas yang memperluas kelas tread
Baris 2. mendefinisikan metode run() yang menyebutkan tugas-tugasyang diperlukan ketika thread ini dieksekusi.
2. Mendefinisikan sebuah kelas yang mengimplementasikan interface runnable. Sembarang kelas dapat mempresentasikan sebuah thread kalau kelas dapat mengimplementasikan interface runnable dan mendefinisikan metode run().
Public class exampleunnable implements runnable {
Public void run() {
}
}
ExampleRunable er = new Example Runnable();
New Thread (er).start();
Keterangan :
• Mendefinisikan kelas baru yang mengimplementasikan interface runnable
• Mendefinisikan metode run () yang melaksanakan tugas-tugas apapun yang diperlukan ketika thread ini dieksekusi.
• Menciptakan instan thread baru dengan objek runnable ( dalam hal ini, er) sebagai argumen, metode star() dari instan baru tersebut dipanggil. Hal ini mengawali thread pengontrolan yang baru.
Pembuatan thread dalam java harus diawali dengan metode start dan mengakhirinya dengan metode stop.
Implementasi metode start :
Public void start()
{
Thread=new thread(this);
Thread.start();
}
Implementasi metode stop :
Public void stop()
{
Thread.stop();
}
Pertama kali thread dibuat kondisinya belum sebagai sekumpulan intruksi yang bisa dieksekusi dengan independen. Namun demikian tempat dimana eksekusi itu dilangsungkan akan dibuat secepatnya. Pertama dengan mengeksekusi thread pada saat mulai mengawali fungsi start () dan dijalankan dengan fungsi run().
Sebelum thread dimulai. Hal ini disebut dengan thread yang baru. Setelah thread dieksekusi kemudian disebut dengan keadaan runnable. Pada saat class keadaan runnable, class tersebut akan mengeksekusi ataupun akan menunggu thread lainnya untuk mengerjakan tugas bersama. Sebuah runnable thread akan memperpanjang waktu tunggu proses thread saat satu ataupun beberapa fungsinya dipanggil yang menyebabkan pula keadaan runnable. Thread bukan hanya menunggu untuk pemrosesan sesumber lainnya, namun juga membuat bloking untuk menunggu suatu proses balik yang kembali ke keadaan runnable. Fungsi sleep() menyebabkan thread memasuki keadaan runnable sembari menunggu intruksi I/O selesai sepenuhnya. Tidak ada hubungan antara keadaan runnable pada suatu thread dengan keadaan runnable pada suatu antarmuka/interface. Sebuah thread berangkat dari keadaan tidak runnable menuju keadaan runnable saat berbagai proses kejadian yang ditunggu telah terjadi. Sebagai contoh, sleeping thread (thread yang berhenti) harus menunggu sampai waktu berhenti langsung. Sebuah thread yang menunggu proses I/O harus menunggu operasi I/O (Input/Output) sampai selesai.
Sebuah thread dapat berupa transisi dari thread yang baru, keadaan runnable ataupun tidak sampai fungsi stop() dipanggil hingga proses eksekusi thread selesai. Saat sebuah thread dalam keadaan mati, selesai atau berhenti, maka selesailah tugas dari thread tersebut dan tidak bisa direview lagi atau dikembalikan lagi kekeadaan semula. Thread mempunyai prioritas yang dapat diatur dan diubah. Thread dengna prioritas yang lebih tinggi akan dieksekusi terlebih dahulu dibandingkan dengan thread dengan prioritas yang lebih rendah, bila keduanya sama-sama telah siapdijalankan. Bila ada salah satu thread berprioritas sama maka setiap thread pada prioritas tersebut akan mendapatkan giliran. Sebuah thread tidak dijadwalkan lagi untuk dijalankan sampai semua thread dengan prioritas yang sama telah dijadwalkan sedikitnya satu kali.
Thread-thread dalam java dapat di preemtible artinya thread yang sedang berjalan akan disingkirkan dari prosessor oleh thread yang berpreoritas lebih tinggi sebelum thread tersebut siap memberikan persetujuannya sendiri. Thread java mungkin atau tidak mungkin juga menjadi time-sliced, artinya thread yang sedang berjalan mungkin atau tidak mungkin berbagi prosesesor dengan thread lainnya yang berpreoritas sama.
Prioritas Thread dinyatakan sebagai suatu integer antar MIN_PRIORITY dsan MAX_PRIORITY. Konstanta ini dinyatakan pada class thread. Prioritas thread dibentuk pada saat class thread dibuat. Nilai default prioritas yakni NORM_PRIORITY adalah 5. Prioritas pada thread dapat diubah dengan menggunakan fungsi setPriority().
Multithreading Dalam Borland C++
Bahasa pemrograman Borland C++ juga terdapat konsep multithreading yang menyediakan berbagai macam fasilitas pengembangan bagi pemrogram untuk mengembangan interaktif (IDE), editor visual dengan berbagai macam kelebihan, pustaka kelas, perangkat pemrogram visual, pengkompilasian baris perintah yang cepat dan pencariankesalahan (debugger) interaktif. Pada pemrograman Borlan C++ mengenal istilah kata kunci_thread yang digunakan dalam program multithread untuk melindungi atau menyimpan keseluruhan copy tunggal dan variable kelas statis. Setiap program thread memuat coy tersendiri dari variable a_thread untuk setiap proses threaded. Untuk memulai suatu thread yang baru digunakan eksekusi start. Alamat start harus dideklarasikan dalam _UERENTRY. Fungsi beginthread untuk menciptakan dan memulai program thread baru. Eksekusi thread dimulai pada start_address. Program thread akan hilang dengan mudah saat mengulang kembali atau dengan memanggil endthread. Beginthread mengembalikan pengendalian (handle) ke thread baru. Pada error fungsi return-1 dan secara keseluruhan variable dimulai dari nilai EAGAIN (untuk banyak thread) dan EINVAL (untuk perintah yang tidak valid).
Class yang digunakan untuk kebutuhan relasi thread dalam Borlan C++, TciticalSelection class, Tmutex class, Tsync class, Tthread class. Program Borlan C++ merupakan program 32 bit yang dapat menciptakan lebih dari satu thread dari suatu eksekusi. Jika program menciptakan multiple thread dan program-program thread juga mengggunakan C++ run time library maka digunakan CW32MT>LIB atau CW32MTI library. Pustaka multithread menjelaskan fungsi-fungsi yang digunakan untuk menciptakan thread, yaitu beginthread, endthread dan threadid. Sedangkan fungsi-fungsi yang terdapat dalam multithread, GetThreadContext, SetThreadContext, SuspendThread, ResumeThread, Thread times, CreateThread dan GetThreadPriority.
C. METODE PENELITIAN
Dengan menggunakan metode penelitian studi pustaka dan analisa studi kasus denagn menganalisa dan membandingkan program yang menggunakan konsep multithreading dari dua bahasa pemrograman yaitu Bahasa Pemrograman Java dengan Bahasa pemrograman Borland C++.
D. HASIL ANALISA DAN PEMBAHASAN
Penggunaan Multithreading pada program Java
Langkah-langkah cara kerja thread dalam java :
1. Menentukan status dari thread. Dalam kasus status thread adalah new, yang artinya thread masih dalam status baru.
Mythread = new thread (this)
2. Membuat prosedur dan menentukan alokasi memori yang diperlukan sehingga thread dapat dijalankan yaitu menggunakan metode start
Mythread.start();
3. Menentukan prioritas dari thread. Setiap thread akan mendapatkan giliran sampai semua thread dijalankan
Public void resume() {MyThread.resume()}
Public void run ()
{
While (true)
4. Semua proses eksekusi thread dilakukan oleh CPU. Jika Thread 1 mendapatkan intruksi untuk menjalankan thread pertamakali, maka thread yang lainnya harus menunggu giliran dalam suatu proses tunggu untuk memperoleh giliran mengeksekusi, jika thread 1 pada saat melakukan eksekusi melakukan sleep, maka thread yang lainnya mendapatkan giliran untuk memulai eksekusi.
Try {Thread.sleep(delay);}
5. Program thread akan tetap melalukan eksekusi sampai ada perintah untuk berhenti. Untuk mengakhiri esksekusi dari program thread menggunakan fungsi stop()
Public void stop() {MyThread.suspend()}
Public void destroy() {this.stop();}
Penggunaan Multithreading pada program Borland C++
Langkah-langkah cara kerja thread dalam Borland C++ :
1. Membuat prosedur dan menentukan alokasi memori yang diperlukan sehingga thread dapat dijalankan yaitu dengan menggunakan metode start
Lpthread_start_routine lpfnThread[4] = {Countthread, Gcdthread, Primethread, Rectthread};
2. Menentukan prioritas thread. Prioritas thread digunakan untuk menentukan thread yang mana yang terlebih dahulu untuk dieksekusi.
SetThreadPriority (Threadinfo[i].hthread, thread_preority¬¬_below¬_normal);
3. Setelah ditentukan prioritas thread , untuk menjalankan thread, thread harus diaktifkan terlebih dahulu
ResumeThread (ThreadInfo [IDC_Count].hthread);
ResumeThread (ThreadInfo [IDC_GCD].hthread);
ResumeThread (ThreadInfo [IDC_Prime].hthread);
ResumeThread (ThreadInfo [IDC_Rect].hthread);
4. Semua eksekusi program thread dilakukan oleh CPU. Jika thread 1 mendapatkan intruksi untuk menjalankan thread pertama kali, maka thread yang lainnya harus menunggu giliran dalam suatu proses tunggu untuk memperoleh giliran mengeksekus, jika thread 1 pada saat melakukan eksekusi memanggil wait maka thread 1 di non aktifkan dan thread yang lainnya mendapat giliran untuk mulai eksekusi. Jika thread 1 ingin diaktifkan kembali maka menggunakan metode notify, sehingga memberikesempatan thread lain yang telah menunggu dapat berjalan lagi. ( Fungsi notify perlu dipanggil oleh beberapa thread, jika tidak thread yang memanggil wait akan menunggu selamanya. Thread yang menunggu tidak secara otomatis diaktifkan kembali pada saat tidak ada thread lain yang bekerja).
FwaitResult = WaitForMultipleObjects (4, lpThreadHandles, True, 0);
}
While (fWaitResult !=Wait_Object _0);
Lresult CmdThreadstate (HWND hwnd, Word w Command, word Wnotify, HWN hwnCtrl)
5. Program thread akan tetap melakukan eksekusi sampai ada perintah untuk berhenti. Untuk mengakhiri eksekusi dari program thread menggunakan fungsi close
sendMessage (hwnd, WM_Close, 0, 0);
Return 0;
Persamaan Konsep Kerja Multithreading Java dan Borlan C++
1. Adanya prioritas thread yang mengakibatkan thread mendapatkan antrian untuk melakukan eksekusi
2. Dalam antrian, thread dengan prioritas tertinggi adalah yang perama untuk melakukan eksekusi
3. mempunyai metode supaya thread masuk dalam antrian, yaitu memanggil metode sementara (metode sleep) atau memanggil wait
4. Pada saat memanggil metode semetara maka thread yang lain mempunyai kesempatan untuk melakukan eksekusi, atau pada saat memanggil metode wait, maka thread yang lain mendapat giliran untuk melakukan eksekusi.
5. Jika thread ditempatkan dalam antrian dan memanggil fungsi wait, maka thread tersebut menjadi tidak aktif dan untuk mengaktifkannya kembali dengan memanggil notify.
Perbedaan Konsep Kerja Multithreading Java dan Borlan C++
Konsep kerja penggunaan multithreading pada bahasa pemrgraman Java dan Borlan C++ tidak terdapat perbedaan. Perbedaan hanya terdapat pada bahasa pemrograman yang digunakan. Bahasa Borland C++ berasal dari pengembangan Bahasa Pemrograman C murni, sedangkan Bahasa pemrograman Java bagian dari pengembangan bahasa C, dan untuk cakupannya Bahsa Pemrograman Borland C++ lebih luas dibandingkan dengan Bahasa Pemrograman Java.
Manfaat yang didapat dari penggunaan Multithreading
1. Multithreading mampu mendukung atau mengerjakan lebih dari satu tugas yang dikerjakan secara bersamaan pada single proses meskipun dengan menggunakan sebuah prosesor
2. Multithreading mempunyai prioritas untuk menentukan urutan eksekusi dari tugas-tugas (thread) yang ada dan dengan menggunakan multithreading, thread yang mempunyai prioritas yang sama akan berbagi prosesor dengan thread yang lain.
E. KESIMPULAN
Kesimpulan yang didapat dari hasil membandingkan konsep kerja multithreading dalam bahasa pemrograman Java dengan Borland C++ ini adalah
1. Dengan membandingkan konsep kerja multithreading pada bahasa pemrograman Java dengan Borland C++ akan diketahui konsep kerja multithreading dari kedua bahasa tersebut.
2. Dengan menggunakan dua bahasa pemrograman yang berbeda, setelah dilakukan analisa penggunaan multithreading, terdapat konsep kerja yang sama.
3. Mutithreading memberikan kemudahan untuk melakukan berbagai kegiatan dalam waktu yang bersamaan
4. Thread apapun dalam program multithreading dapat memanggil serangkaian metode yang dapat dipanggil dalam program threaded tunggal.
5. Thread dapat membuat program berjalan dengan cara bersamaan, meskipun pada perangkat keras berprosesor tunggal.
DAFTAR PUSTAKA
Jaworski Jamie, JAVA Developer’Guide, Sams.net Publishing Indianapolis
Mike, Bryyan , Morison. M,Michael. T, Joshi Dan , Trinko Tom, JAVA Developer’ Reference, Sams.net Publishing Indianapolis
Mc Clellan.A.L dan Jackson J.R, Java by Example, Sun Microsystem, Inc
Linden Peter van der, Just Java, Sun Microsystem, Inc
Pew.John. A, Instant Java, Sun Microsystem, Inc
Horstmann.C.S, Cornell Gary, Core Java, Sun Microsystem, Inc
www.master.web.id/mwmag/…java-1/tutorial-java-1.htm
ilmukomputer.org/category/pemrograman-java/
www.indonesiaindonesia.com/…/18264-pemrograman-borland-c
IDENTITAS PENULIS
Bekti Ratna Timur Astuti, S.Kom
Guru mata pelajaran TIK SMAN 1 Sragen