Sabtu, 07 November 2015

[TUTORIAL] Thread Dan IPC

     Sebelumnya kalian pasti pernah mendengar kata thread dan IPC, kan? Nah, disini kita akan membahas berbagai hal mengenai Thread dan IPC tersebut.

     Pertama kita akan membahas thread, apa itu thread?

     Thread adalah bagian kecil dari suatu proses yang bisa di jadwalkan oleh sistem operasi. Thread juga disebut sebagai proses ringan (lightweight).

     Thread dibagi menjadi 2 jenis, Single Threading dan Multi Threading.

     a. Single Threading
         Adalah sebuah proses yang hanya memiliki satu thread yang berjalan. Biasanya fungsi thread ini digunakan sebagai pengendali jalannya proses.

     b. Multi Threading
         Adalah proses yang memiliki lebih dari satu thread yang berjalan didalamnya, sehingga dalam hal ini proses dapat menjalankan lebih dari satu tugas dalam satu waktu.

     Kedua, kita akan membahas IPC. IPC sendiri memiliki kepanjangan Inter Process Communication. IPC adalah cara atau mekanisme pertukaran data antara satu proses dengan proses lainnya, baik itu proses yang berada di dalam komputer yang sama, atau komputer jarak jauh yang terhubung melalui jaringan.

     a. Pipes
         Pipe merupakan komunikasi sequensial antarproses yang saling terelasi, namun pipe memiliki            kelemahan yaitu hanya bisa digunakan untuk komunikasi antar proses yang saling berhubungan,          dan komunikasinya yang dilakukan adalah secara sequensial.

     b. Message Queue
         Sistem berkirim pesan adalah proses komunikasi antar bagian sistem untuk membagi variabel              yang dibutuhkan. Proses ini menyediakan 2 operasi yaitu mengirim pesan dan menerima pesan.

     c. Shared Memory
         Sistem berbagi memori merupakan salah satu cara komunikasi antar proses dengan cara                      mengalokasikan suatu alamat memori untuk dipakai berkomunikasi antar proses. Alamat dan              besar alokasi memori yang digunakan biasanya ditentukan oleh pembuat program. Pada metode          ini, sistem akan mengatur proses mana yang akan memakai memori pada waktu tertentu                      sehingga pekerjaan dapat dilakukan secara efektif.

     d. Socket
         Bentuk dari komunikasi yaitu UDP dan TCP menggunakan abstraksi socket yang menyediakan          endpoint untuk komunikasi antar proses. Socket bisa dijalankan di berbagai platform (BSD                  UNIIX, UNIX, Linux, Windows dan Machintos OS)
     Berikut ini adalah contoh kodingan untuk membuat suatu program yang dapat memainkan, pause, dan continue suatu lagu dan juga menampilkan playlist lagu yang tersedia.

#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>


pthread_t tid[10];
int n;

void* playandcount(void *arg){
     unsigned long i=0;
     pthread_t id=pthread_self();
     int iter;
     if(pthread_equal(id,tid[1])){
          system("clear");
          printf("\nHelp List\n");
          printf("Press the below number to execute command\n");
       printf("1===Show Help command\n");
      printf("2===Show playlist\n");
      printf("3===Play\n");
      printf("4===Pause after x sec\n");
      printf("5===Continue after x sec\n");
      printf("6===Stop after x sec\n");
     }
     else if(pthread_equal(id,tid[2])){
          system("clear");
          system("ls | grep .mp3");
     }
     else if(pthread_equal(id,tid[3])){
          system("clear");
          system("mpg123 Try.mp3");
     }
     else if(pthread_equal(id, tid[4])){
          system("clear");
          sleep(n);
          system("pkill -STOP mpg123");
     }
     else if(pthread_equal(id, tid[5])){
          system("clear");
          sleep(n);
          system("pkill -CONT mpg123");
     }
     else if(pthread_equal(id,tid[6])){
          system("clear");
          sleep(n);
          system("pkill mpg123");
     }
     return NULL;
}

int main(void){
     system("clear");
while(1){
      int flag=0;
       int comm;
      int i=0;
      int err=0;
      scanf("%d", &comm);
      if(comm==4 || comm==5 || comm==6)
            scanf("%d", &n);
          printf("\n\n");
       
          if (err!=0)
            printf("\ncan't create thread : [%s]", strerror(err));
      else
            err=pthread_create(&(tid[comm]), NULL, &playandcount, NULL);
     }
     return 0;
}

Tidak ada komentar:

Posting Komentar

Popular Posts

Blogroll

Tentang Gw / About Me

Pati, Jawa Tengah, Indonesia
Namaku Dito. Lengkapnya Pramudito Hapriarso. Kelahiran 1996. Sekarang menetap di Indonesia.

About

Blogger templates

Blogger news

Pages - Menu

Pengikut