Apa yang dimaksud dgn thread?
Thread adalah potongan kode yg independent (dari sebuah proses) yang di ekseskusi oleh CPU yg penjadwalanya di lakukan oleh Operating sytem.
Perbedaan Multi-Tasking dan Multi-treading
Multitasking adalah beberapa aplikasi/program yang dijalankan secara paralel (sebenarnya sih dijalankan bergantian secara cepat) oleh operating system contohnya anda menjalankan program ms.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 aplikasi/proses yang dilaksana secara paralel (sebenernya sih bergantian secara cepat. kecuali prosesornya double core). 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.)
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.
Beberapa contoh manfaat Thread
- Pada user interfaceSebuah 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 lagi: 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.
Program mencuci tumpukan gelas dan tumpukan piring dgn threading
using System;
using System.Threading;
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.using System.Threading;
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();
}
}
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(“=======================================”);
}
}
Cara penulisan Thread
Sumber
-http://www.codeproject.com/Articles/1083/Multithreaded-Programming-Using-C
- http://www.codeproject.com/Articles/26148/Beginners-Guide-to-Threading-in-NET-Part-1-of-n
- http://www.albahari.info/threading/threading.pdf
- http://www.techrepublic.com/article/a-beginners-guide-to-threading-in-c/1044970


