-->
g2QFCKwavghUp2yzjKrIFwEeG13RASCerFTCMH35

Program C MultiThread


Perbedaan Multi-Tasking dan Multi-treading
Multitasking adalah beberapa proses aplikasi yang dijalankan secara paralel (sebenarnya sih dijalankan bergantian secara cepat) oleh operating system contohnya anda menjalankan programms.excel sambil  membuka program  musik WinAmp .  Kita merasakan program  excel dan winamp berjalan bersamaan , padahal sebenarnya CPU diperintahkan oleh  OS mengeksekusi  program excel dan winamp secara bergantian dgn kecepatan tinggi.
Multi-treading adalah beberapa tread potongan program dlm satu proses  yang dilaksana secara paralel (sebenernya sih bergantian secara cepat( kecuali prosesornya multi core)  dan thread dibuat oleh programmer. Contohnya adalah sebuah program server misal chat server maka ia harus melayani permintaan client  yang datang hampir bersamaan secara paralel. server akan membuat thread untuk melayani tiap client yg datang. setiap client dilayani oleh satu thread. sehingga tidak ada antrian jika client yang datang banyak.
Untuk melihat Prosses dan thread yang sedang aktif di OS windows anda bisa menekan Alt+Ctrl+Del  klik menu Task Manager maka akan tampil sbb:
(jika kolom thread tdk tampak , klik menu View ->select colom->di centang/check  thread count.)

Daftar Proses dan jumlah threadnya pada OS windows
Perumpamaan lain multi-threading adalah  Koki di restoran  yang mempunyai anak buah. Untuk setiap pelanggan dilayani oleh 1 anak buah jadi pelanggan tdk perlu menunggu lama. Koki nya adalah program/proses, anak buah kokinya adalah thread.

ilustrasi perbandingan mono thread  dan multi thread

Daur hidup thread

Thread dalam setiap saat mempunyai satu keadaan  dari beberapa keadaan sebagaimana gambar berikut ini:
thrad_lifecycle

Beberapa contoh manfaat Thread

 – Pada user interface
Sebuah proses dlm program biasanya berurutan  spt ini:
Input data->proses data->menampilkan data.
tiap  proses bisa jadi memakan waktu lama.  jika tiap proses di atas masing masing dibuatkan sebuah thread maka  ketika  data sedang di proses input data bisa tetap berlangsung dan ketika proses data sedang berlangsung bisa juga di cancel karena proses diatas berjalan secara paralel.
– Pada aplikasi  server
Misalkan aplikasi webserver , aplikasi ini melayani permintaan page untuk tiap permintaan client yg datang. Tiap client yang datang dilayani oleh 1 thread . jika pada saat yg hampir bersamaan datang 10 client maka akan dibuatkan 10 thread yg melayani secara bersamaan. contoh lain adalah program chat client -server.
Contoh ilustrasi : mencuci tumukan gelas dan piring secara bersamaan
kita buatkan 2 thread . 1 thread untuk mencuci piring dan 1 thread untuk mencuci gelas. sehingga gelas dan piring dicuci  secara paralel.

Multitreading di C#

.NET framework class library   mengelola multithreading di namespace  System.Threading.  adapun class  classnya adalah class thread dan class monitor.   adapun  secara singkat tahapan membuat thread pada program kita adalah
1.  objek thread dibuat   dengan cara
Thread objek_thread = new thread (new Threadstart(obj_methode)
2. lalu thread dimulai dhn methode start.
keterangan:  Threadstart adalah delegate , obj_methode adalah methode yg akan dijalankan delegate threadstart.
Contoh 1 , kita membuat dua buah thread yaitu thread  pertama cuci gelas dan thread kedua cuci piring.
Program mencuci  tumpukan gelas dan tumpukan piring dgn threading
using System;
using System.Threading;   // namespace multithreading
public class MyThread {
public static void Thread1() {
for (int i = 0; i < 10; i++) {
Console.WriteLine(“cuci gelas ke {0}”, i);
Thread.Sleep(3000);
}
}
public static void Thread2() {
for (int i = 0; i < 10; i++) {
Console.WriteLine(“cuci piring ke {0}”, i);
Thread.Sleep(3000);
}
//Thread.Sleep(3000);
}
}
public class MyClass {
public static void Main() {
Console.WriteLine(“mulai mencuci tumpukan gelas dan piring “);
Thread tid1 = new Thread(new ThreadStart(MyThread.Thread1 ) );
Thread tid2 = new Thread(new ThreadStart(MyThread.Thread2 ) );
tid1.Start();
tid2.Start();
}
}
Memang jika di lihat hasil  di layar monitor terlihat secara selang seling, tapi secara tdk terlihat  ke 2 thread di proses paralel.

hasil multithreading di monitor
Hasil program diatas adalah : piring dan gelas di cuci secara bersamaan dan selesai  secara bersamaan.
Kalau program diatas tanpa threading maka hasilnya akan berurutan mencuci gelas sampai selesai baru kemudian mencuci piring sampai selesai.
Program mencuci tumpukan gelas dan piring tanpa threading:
using System;
using System.Threading;
public class non_Thread {
public void cuci_gelas() {
for (int i = 0; i < 10; i++) {
Console.WriteLine(“cuci gelas ke {0}”, i);
}
}
public void cuci_piring() {
for (int i = 0; i < 10; i++) {
Console.WriteLine(“cuci piring ke {0}”, i);
}
}
}
public class MyClass {
public static void Main() {
Console.WriteLine(“=======================================”);
Console.WriteLine(“mulai mencuci tumpukan gelas dan piring “);
Console.WriteLine(“=======================================”);
non_Thread tid1 = new non_Thread();
tid1.cuci_gelas();
tid1.cuci_piring();
Console.WriteLine(“=======================================”);
Console.WriteLine(” Selesai…nyucinya ! “);
Console.WriteLine(“=======================================”);
}
}

program tanpa threading
Hasil dari program diatas adalah: gelas  dicuci  lebih dahulu sampai selseai  kemudian disusul piring.
Contoh ke 2 ,  dua buah thread yaitu iris cabe dan ulek bawang
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ConsoleApplication5
{
class ThreadTester
{
static void Main( string[] args )
{
// membuat thread dan beri nama.
kerjaan_thread kerjaan1 = new kerjaan_thread();
Thread thread1 = new Thread ( new ThreadStart( kerjaan1.iris_cabe ) );
thread1.Name = “iris cabe”;
kerjaan_thread kerjaan2 = new kerjaan_thread();
Thread thread2 = new Thread(new ThreadStart(kerjaan1.ulek_bawang ));
thread2.Name = “ulek bawang”;
Console.WriteLine(“================ \n”);
Console.WriteLine( “threads di aktifkan” );
Console.WriteLine(“================ \n”);
// started state -> running state
thread1.Start();
thread2.Start();
Console.WriteLine(“====================================”);
Console.WriteLine( “semua thread (pekerjaan) stand by , siap di kerjakan KOKI ” );
Console.WriteLine(“====================================”);
}
} // end class
class kerjaan_thread
{
private int waktutidur_iriscabe ;
private int waktutidur_ulekbawang ;
private static Random random = new Random();
public kerjaan_thread()
{
waktutidur_iriscabe = 2000;
waktutidur_ulekbawang = 1000;
}
//
public void iris_cabe()
{
for (int i=0; i < 4; i++)
{
Console.WriteLine(“iris cebe ke{0}”, i);
Thread current = Thread.CurrentThread;
Console.WriteLine(current.Name +” diistirahatkan selama ” + waktutidur_iriscabe + ” detik”);
//thread.running -> thread sleeping
Thread.Sleep(waktutidur_iriscabe);
Console.WriteLine(current.Name + “bangun dari istirahat”);
Console.WriteLine(“================ \n”);
}
} // end method masak
public void ulek_bawang()
{
for (int i=0; i< 2; i++)
{
Console.WriteLine(“ulek bawang ke{0}”, i);
Thread current2 = Thread.CurrentThread;
Console.WriteLine(current2.Name + ” diistirahatkan selama ” + waktutidur_ulekbawang + ” detik”);
//thread.running -> thread sleeping
Thread.Sleep(waktutidur_ulekbawang);
// print thread name
Console.WriteLine(current2.Name + ” bangun dari istirahat”);
Console.WriteLine(“================ \n”);
}
}
} // end
}
contoh_thread2

Untuk melihat jumlahthread yg running dgn cara  saat program sedang jalan coba anda ketik alt-ctrl-del , kemudian pilih task manager
thread_running

syncronisasi thread
Jika ada dua thread yg bersamaan merubah  sebuah data, maka akan terjadi data tdk valid, untuk mencegah ini dibuat mekanisme
THREAD SYNCRON2

SUmber :pccontrol.wordpress.com
Related Posts

Related Posts

Post a Comment