Senin, 10 Februari 2014

Pemrograman Socket Bag. 2 – (Simple Multi-Thread)

Tutorial Pemrograman Socket Bagian 2 kali ini akan membahas tentang Simple Multi-Thread. Kenapa Multi-Thread ? Walaupun yang kita bahas adalah pemrograman socket, namun dalam implementasi berikutnya program kita akan sangat tergantung dengan multi-threaded. Karena pada artikel selanjutnya Insya Allah kita akan membahas mengenai pembuatan aplikasi chatting multi client yang memerlukan implementasi multi-threaded, maka pada bagian ini kita akan membahas mengenai dasar thread.

Pada saat kita membuat sebuah aplikasi, maka secara default aplikasi tersebut menggunakan single-thread. Program hanya dapat menjalankan 1 tugas dalam
satu waktu. User tidak bisa memaksa program untuk menjalankan tugas yang lain ketika proses belum selesai. Dengan Multi-threading, tugas yang lain dapat dieksekusi tanpa harus menunggu tugas sebelumnya selesai.

Untuk mempermudah pemahaman, ada baiknya kalau kita langsung melihat perbedaan antara aplikasi yang single-thread dengan aplikasi yang multi-thread.

Perhatikan baris program berikut :
    1 using System;
    2 using System.Collections.Generic;
    3 using System.Linq;
    4 using System.Text;
    5 
    6 namespace TanpaThread
    7 {
    8     class Program
    9     {
   10         static void Main(string[] args)
   11         {
   12             while (true)
   13             {
   14                 Console.WriteLine("Ini adalah thread utama, berada di dalam method main()");
   15             }
   16 
   17             thread1();  //baris kode berikut tidak akan pernah di eksekusi
   18             thread2();  //method ini tidak akan pernah di eksekusi
   19         }
   20 
   21         static void thread1()
   22         {
   23             while (true)
   24             {
   25                 Console.WriteLine("Sedangkan ini adalah thread 1, berada di dalam method thread1()");
   26             }
   27         }
   28 
   29         static void thread2()
   30         {
   31             while (true)
   32             {
   33                 Console.WriteLine("Dan ini adalah thread 2, berada di dalam method thread2()");
   34             }
   35         }
   36     }
   37 }


Output yang dihasilkan adalah :

Terlihat pada gambar diatas method thread1() dan thread2() tidak pernah dan tidak akan pernah di eksekusi karena hanya terdapat single-thread yaitu Main-Thread yang mengeksekusi method main() secara terus menerus.
Dengan cara yang lain, walaupun kita menempatkan pemanggilan method thread1() pada bagian lebih awal dari looping while() method main() dan thread2(), maka yang terjadi adalah malah sebaliknya, yaitu method main() dan thread2() tidak akan pernah dieksekusi, perhatikan baris kode berikut :
   10  static void Main(string[] args)
   11         {
   12             thread1();  //baris kode akan dieksekusi terlebih dahulu sehingga method thread2()
   13             thread2();  //dan method main() dibawahnya tidak akan pernah dieksekusi
   14 
   15             while (true)
   16             {
   17                 Console.WriteLine("Ini adalah thread utama, berada di dalam method main()");
   18             }
   19         }


Nah bagaimana supaya ketiga method tersebut bisa dieksekusi kesemuanya dan dalam waktu yang bersamaan ?, maka kita harus menciptakan thread untuk setiap method tersebut. Untuk membuat program multi-thread tambahkan name space System.Threading, dan buat kode seperti berikut :
    1 using System;
    2 using System.Collections.Generic;
    3 using System.Linq;
    4 using System.Text;
    5 
    6 using System.Threading;
    7 
    8 namespace SimpleMultiThreaded
    9 {
   10     class Program
   11     {
   12         static void Main(string[] args)
   13         {
   14             Thread nThread1 = new Thread(thread1);
   15             nThread1.Start();
   16 
   17             Thread nThread2 = new Thread(thread2);
   18             nThread2.Start();
   19 
   20             while (true)
   21             {
   22                 Console.WriteLine("Ini adalah thread utama, berada di dalam method main()");
   23                 Thread.Sleep(1000);  //Thread dibuat berhenti selama 1 detik, agar anda bisa
   24                                      //melihat proses eksekusi dari thread
   25             }
   26         }
   27 
   28         static void thread1()
   29         {
   30             while (true)
   31             {
   32                 Console.WriteLine("Sedangkan ini adalah thread 1, berada di dalam method thread1()");
   33                 Thread.Sleep(1000);
   34             }
   35         }
   36 
   37         static void thread2()
   38         {
   39             while (true)
   40             {
   41                 Console.WriteLine("Dan ini adalah thread 2, berada di dalam method thread2()");
   42                 Thread.Sleep(1000);
   43             }
   44         }
   45     }
   46 }


Setelah anda mengetikkan kode program tersebut, jalankan program maka kita akan melihat ketiga method (main(), thread1(), thread2()) akan dieksekusi secara bersamaan seperti gambar berikut :

Kenapa saya katakan secara bersamaan ?, karena jika anda perhatikan, dalam satu waktu akan ada 3 baris yang ditampilkan (= 3 method) sekaligus.
Kalau digambarkan maka prosesnya akan tampak seperti diagram berikut :

Baiklah, sekian dulu tutorial ini, silahkan mencoba. Untuk mendownload project ini bisa di download disini. Di tutorial berikutnya insya Allah kita akan membahas mengenai aplikasi chatting multi client.

Tidak ada komentar:

Posting Komentar