Suatu
program dengan menggunakan fitur multithreading
dapat menjalankan 2 atau lebih kegiatan dalam waktu yang bersamaan. Konsep ini
juga biasa disebut dengan multitasking.
Sebenarnya multitasking dibagi
menjadi 2 bagian; Process Based dan Thread Base. Process Based adalah multitasking
saat suatu program dijalankan bersamaan dengan program lain dalam satu waktu.
Contoh kasus suatu multitasking Process
Based adalah bila pengguna sedang menulis laporan di OpenOffice sambil mencari referensi di Internet dengan menggunakan Software Browser dalam satu waktu. Hal
ini kita sedang menggunakan 2 software
dalam satu waktu.
Thread Base adalah multitasking saat suatu program dijalankan, program itu dapat
melakukan proses – proses lain yang dilakukan bersamaan dalam suatu waktu.
Contohnya adalah bila pengguna sedang mencetak suatu lembar laporan yang
dilakukan di OpenOffice misalnya.
Kadang sambil menunggu cetakan selesai, pengguna bisa melihat-lihat cetakan
selanjutnya yang akan dicetak, dan kadang pengguna juga mengedit tulisan dengan
merubah ukuaran huruf atau warna huruf misalnya. inilah proses Thread Base multitasking yang terjadi
dalam kegiatan tersebut.
Dalam
proses multitasking, ada keadaan yang
mesti diketahui yaitu keadaan saat berjalan (Running) artinya adalah Processor
menjalankan suatu kegiatan. Keadaan menghentikan sementara (Suspend) adalah kegiatan dari processor dihentikan sementara sampai
keadaan dilanjutkan yaitu keadaan Resumed
atau kadang keadaan pembatalan kegiatan processor(Blocked) dan terakhir keadaan selesai
atau finishing(Terminating).
Multithreading adalah kemampuan sebuah program untuk melakukan
lebih dari satu pekerjaan sekaligus. Keuntungan dari multithreading adalah sifat respons yang interaktif dan real-time. Arti
istilah Multithreading dianggap
berkaitan erat dengan pengertian multi
thread merupakan jalannya beberapa proses dengan urutan yang cepat (multitasking) dalam satu program. Multithreading ini merupakaan teknik
pada manipulasi data dimana node-node pada struktur pohon data berisi penunjuk
ke node yang lebih tinggi untuk membuat lintasan struktur menjadi lebih
efisien.
Namun
seiring berjalannya waktu dan tuntutan teknologi ternyata ditemukan kelemahan
yang sebenarnya bisa diminimalisir pada proses. Untuk itulah diciptakan thread yang merupakan cara dari komputer
untuk menjalankan dua atau lebih task dalam waktu bersamaan, sedangkan
multithreading adalah cara komputer untuk membagi-bagi pekerjaan yang
dikerjakan sebagian-sebagian dengan cepat sehingga menimbulkan efek seperti
menjalakan beberapa task secara bersamaan walaupun otaknya hanya satu.
Keuntungan MultiThreading Multiprocessing
merupakan penggunaan dua atau lebih CPU dalam sebuah sistem komputer.
Multitasking merupakan metode untuk menjalankan lebih dari satu proses dimana
terjadi pembagian sumberdaya seperti CPU. Multithreading adalah cara
pengeksekusian yang mengizinkan beberapa thread terjadi dalam sebuah proses,
saling berbagi sumber daya tetapi dapat dijalankan secara independen.Di_C#
{
class Aplikasi_Photoshop
{
public int jumlah_Kertas;
public Thread kriteria_Kertas;
public void Proses_Cetak_kertas()
{
Console.WriteLine( kriteria_Kertas.Name + " Proses Pencetakan Kertas Bufalo");
int b = jumlah_Kertas;
for ( b=0 ; b<10 ; b++ )
{
Thread.Sleep(300);
Console.WriteLine( kriteria_Kertas.Name +", Jumlah Cetakan " + jumlah_Kertas);
jumlah_Kertas++;
}
Console.WriteLine(kriteria_Kertas.Name + " Finish Cetak");
Console.WriteLine();
}
public Aplikasi_Photoshop(string laki_laki)
{
jumlah_Kertas = 0;
kriteria_Kertas = new Thread(new ThreadStart(this.Proses_Cetak_kertas));
kriteria_Kertas.Name = laki_laki;
kriteria_Kertas.Start();
}
}
class Aplikasi_Winamp
{
public int jumlah_Lagu;
public Thread kategori_Lagu;
public void Putar_Aplikasi_Winamp()
{
Console.WriteLine( kategori_Lagu.Name + " Music Indi ");
int a = jumlah_Lagu;
for (a=0; a<10; a++ )
{
Thread.Sleep(300);
Console.WriteLine( kategori_Lagu.Name +", Music Putar Track ke- " + jumlah_Lagu);
jumlah_Lagu++;
}
Console.WriteLine(kategori_Lagu.Name + " Selesai Diputar");
}
public Aplikasi_Winamp(string musik_Keroncong)
{
jumlah_Lagu = 0;
kategori_Lagu = new Thread(new ThreadStart(this.Putar_Aplikasi_Winamp));
kategori_Lagu.Name = musik_Keroncong;
kategori_Lagu.Start();
}
}
class Program
{
public static void Header()
{
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine(" TUGAS VII\n ");
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(" Multi Threading ");
Console.WriteLine(" ------------------------------------------------ ");
Console.ForegroundColor = ConsoleColor.Black;
Console.WriteLine(" | Abdul Kohar | 1110100535 | \n\n");
}
public static void Main(string[] args)
{
Header();
Console.WriteLine("Dua Aplikasi / Thread yang berjalan");
Console.WriteLine("--------------------");
Console.WriteLine("Thread Pertama");
Aplikasi_Photoshop pts_a = new Aplikasi_Photoshop("Cetak Bufalo 1");
Aplikasi_Photoshop pts_b = new Aplikasi_Photoshop("Cetak Bufalo 2");
Aplikasi_Photoshop pts_c = new Aplikasi_Photoshop("Cetak Bufalo 3");
Aplikasi_Photoshop pts_d = new Aplikasi_Photoshop("Cetak Bufalo 4");
do
{
Console.Write("-");
Thread.Sleep(50);
}
while(pts_a.jumlah_Kertas <5 && pts_b.jumlah_Kertas<5 && pts_c.jumlah_Kertas<5 && pts_d.jumlah_Kertas<5);
Console.WriteLine();
Console.WriteLine("--------------------");
Console.WriteLine("Thread Kedua");
Aplikasi_Winamp winamp_a = new Aplikasi_Winamp("Putar Lagu Pop Rama");
Aplikasi_Winamp winamp_b = new Aplikasi_Winamp("Putar Lagu Pop Sid");
Aplikasi_Winamp winamp_c = new Aplikasi_Winamp("Putar Lagu Pop St12");
do
{
Console.Write("-");
Thread.Sleep(50);
}
while(winamp_a.jumlah_Lagu <5 && winamp_b.jumlah_Lagu<5 && winamp_c.jumlah_Lagu<5);
Console.WriteLine();
Console.WriteLine("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
Di_java
#include#include #include #include #include #include using namespace std; class ThreadX { private: int loopStart; int loopEnd; int dispFrequency; public: string threadName; ThreadX( int startValue, int endValue, int frequency ) { loopStart = startValue; loopEnd = endValue; dispFrequency = frequency; } static unsigned __stdcall ThreadStaticEntryPoint(void * pThis) { ThreadX * pthX = (ThreadX*)pThis; pthX->ThreadEntryPoint(); return 1; } void ThreadEntryPoint() { for (int i = loopStart; i <= loopEnd; ++i) { if (i % dispFrequency == 0) { printf( "%s : i = %d\n", threadName.c_str(), i ); } } printf( "%s Thread Selesai\n", threadName.c_str() ); } }; int main(int argc, char *argv[]) { cout< threadName = " Thread A "; ThreadX * o2 = new ThreadX( -500, 0, 150 ); HANDLE hth2; unsigned uiThread2ID; hth2 = (HANDLE)_beginthreadex( NULL,0,ThreadX::ThreadStaticEntryPoint,o2,CREATE_SUSPENDED,&uiThread2ID ); if ( hth2 == 0 ) printf("Gagal Membuat Thread 2\n"); GetExitCodeThread( hth2, &dwExitCode ); printf( "Nilai thread 2 = %u\n", dwExitCode ); cout< threadName = " Thread B "; ResumeThread( hth1 ); ResumeThread( hth2 ); WaitForSingleObject( hth1, INFINITE ); WaitForSingleObject( hth2, INFINITE ); cout<

0 komentar:
Posting Komentar