Ingat dengan film Benteng Takeshi di TPI (sekarang jadi MNC TV) ? Rintangan di benteng takeshi sangatlah banyak. Nah disini kita akan membuat salah satu dari rintangan tersebut, nama rintanganny adalah "Sumur Tua".
Sebelum kita membuat game seperti itu, kita harus mengetahui dulu apa itu thread, apa itu IPC.
THREAD
thread adalah unit dasar dari utilitas CPU. Di dalamnya terdapat ID thread, program counter, register, dan stack, dan juga saling berbagi dengan thread lain dalam proses yang sama.
Perbedaan antara thread dengan proses
Thread
PIPES
Contoh kode program dari pipe
wirte.c
char *fifo = "/tmp/fifo/";
ind fd,arr[100];
fd = open(fifo,O_WRONLY);
write (fd,arr,sizeof(arr));
close(fd);
unlink(fifo);
read.c
char *fifo = "/tmp/fifo/";
int fd,arr[100];
fd = open(fifo,O_RDONLY);
read(fd,arr,sizeof(arr));
close(fd);
jalankan kedua program tersebut di terminal yang berbeda, dan lihat hasilnya
-- Penjelasan --
a) Deklarasi variabel
Variabel pertama bertype char pointer (char *fifo), dimana variabel fifo tersebut berisi lokasi yang akan digunakan untuk membuat file pipe, misal lokasinya adalah "/tmp/fifo/". Maka deklarasinya adalah :
Variabel kedua adalah variabel bertype integer yang akan digunakan untuk membuka file pipe tadi (int fd) dan juga variabel array of integer untuk ditulis ke dalam file pipe tersebut (arrp100]). Maka deklarasinya adalah:
b) Membuat file pipe
File pipe bisa dibuat melalui perintah mkfifo, dimana salah satu parameternya adalah 0666, yaitu menandakan bahwa file pipe tersebut bisa di read and write. Maka deklarasinya adalah :
c) Membuka file pipe
File pipe yang tadi telah kita buat kemudian dibuka dengan menggunakan perintah "open", lalu dimasukkan ke dalam variabel integer yang telah kita buat Parameter ke dua isikan dengan "O_WRONLY" yang dimaksudkan untuk file tersebut dibuka dengan dalam meode
d) Menuliskan isi file pipe
Menuliskan isi file pipe bisa menggunakan perintah "write"
e) Menutup file pipe
Menutup file pipe bertujuan agar file pipe tersebut tidak akan diakses terus menerus. Menutup file pipe menggunakan perintah "close"
f) Menghapus file pipe
Menghapus file pipe menggunakan perintah "unlink"
Sebelum kita membuat game seperti itu, kita harus mengetahui dulu apa itu thread, apa itu IPC.
THREAD
thread adalah unit dasar dari utilitas CPU. Di dalamnya terdapat ID thread, program counter, register, dan stack, dan juga saling berbagi dengan thread lain dalam proses yang sama.
Perbedaan antara thread dengan proses
Thread
- Memiliki akses langsung ke segmen data dari prosesnya
- Dapat saling berkomunikasi dengan thread lain dalam satu proses
- Perubahan pada thread utama seperti pembatalan atau perubahan prioritas dapat mempengaruhi tingkah laku thread lain dalam satu proses
Proses
- Memiliki ruang / space sendiri di memori untuk menampung process image
- Memiliki ruang alamat atau IP address masing-masing
- Tidak dapat mengakses ruang lain di memori yang menjadi milik proses lainnya.
Keuntungan menggunakan thread
- Waktu pembuatan yang lebih cepat
- Waktu pemberhentian yang lebih cepat
- Waktu pergantian antar thread lebih cepat daripada antar proses
- Komunikasi antar thread lebih efisien
Thread sendiri dibagi menjadi 2, yaitu Single Threading dan Multi Threading.
- Single threading adalah proses yang memiliki satu thread yang berjalan. Biasanaya fungsi thread ini digunakan sebagai pengendali jalannya proses.
- 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.
Oke, diatas ini adalah penjelasan secara garis besar tentang thread. Sekarang langsung saja kita coba implementasinya dengan membuat sebuah game sumur tua seperti pada film benteng takeshi.
- Pertama, masuk ke dalam terminal
- Lalu buat sebuah file baru, dengan nama terserah. Di sini saya contohkan dengan nama benteng_takeshi.c. Caranya ketikkan -> gedit benteng_takeshi.c
- Lalu akan muncul sebuah layar kosong (seperti notepad pada windows). Lalu silahkan ketik seperti gambar dibawah ini.
- Setelah selesai, save program tersebut
- Lalu ketikkan gcc -o [nama_file_output] [nama_file_.c] -lpthread -lm. Di sini saya contohkan seperti -> gcc -o benteng_takeshi benteng_takeshi.c -lpthread -lm
- Lalu ketikkan ./benteng_takeshi
Game sumur tua sudah jadi, kita akan memberikan beberapa invoasi - invoasi dengan game sumur tua tersebut. Salah satunya kita bisa menggunakan IPC.
IPC (Inter Process Communication)
IPC adalah komunikasi antar proses untuk mengirim data dari satu proses ke proses yang lain, baik antar proses dalam satu kompute rmaupun proses-proses dalam komputer yang berbeda. Jenis-jenis IPC ada 4, antara lain :
- Pipes
- Message Queue
- Shared Memory
- Socket
PIPES
Pipe merupakan komunikasi sekuensial antar proses yang saling terelasi, namun pipe memiliki kelemahan yaitu hanya bisa digunakan untuk komunikasi antar proses yang saling berhubungan, dan komunikasinya yang dilakukan adalah secara sekuensial. Jika komunikasi yang diinginkan adalah komunikasi 2 arah, maka kita harus membuat dua pipe, karena sebuah pipe hanya bisa digunakan untuk komunikasi satu arah saja.
Pipe sendiri terbagi lagi menjadi 2, antara lain :
- Named pipe
- Unnamed pipe
Contoh kode program dari pipe
wirte.c
char *fifo = "/tmp/fifo/";
ind fd,arr[100];
fd = open(fifo,O_WRONLY);
write (fd,arr,sizeof(arr));
close(fd);
unlink(fifo);
read.c
char *fifo = "/tmp/fifo/";
int fd,arr[100];
fd = open(fifo,O_RDONLY);
read(fd,arr,sizeof(arr));
close(fd);
jalankan kedua program tersebut di terminal yang berbeda, dan lihat hasilnya
-- Penjelasan --
a) Deklarasi variabel
Variabel pertama bertype char pointer (char *fifo), dimana variabel fifo tersebut berisi lokasi yang akan digunakan untuk membuat file pipe, misal lokasinya adalah "/tmp/fifo/". Maka deklarasinya adalah :
char *fifo = "/tmp/fifo/";
Variabel kedua adalah variabel bertype integer yang akan digunakan untuk membuka file pipe tadi (int fd) dan juga variabel array of integer untuk ditulis ke dalam file pipe tersebut (arrp100]). Maka deklarasinya adalah:
int fd,arr[100];
b) Membuat file pipe
File pipe bisa dibuat melalui perintah mkfifo, dimana salah satu parameternya adalah 0666, yaitu menandakan bahwa file pipe tersebut bisa di read and write. Maka deklarasinya adalah :
mkfifo(fifo,0666);
c) Membuka file pipe
File pipe yang tadi telah kita buat kemudian dibuka dengan menggunakan perintah "open", lalu dimasukkan ke dalam variabel integer yang telah kita buat Parameter ke dua isikan dengan "O_WRONLY" yang dimaksudkan untuk file tersebut dibuka dengan dalam meode
fd = open(fifo,O_RDONLY);
d) Menuliskan isi file pipe
Menuliskan isi file pipe bisa menggunakan perintah "write"
write(fd,arr,sizeof(arr));
e) Menutup file pipe
Menutup file pipe bertujuan agar file pipe tersebut tidak akan diakses terus menerus. Menutup file pipe menggunakan perintah "close"
close (fd);
f) Menghapus file pipe
Menghapus file pipe menggunakan perintah "unlink"
unlink(fifo);





Komentar
Posting Komentar