Selasa, 17 Juli 2012

Multi Threading


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

f

h

Featured Posts Coolbthemes