Semaphores, Shared Memory, And Messeage Queues



Semaphores 

Semaphores adalah sebuah struktur data komputer yang digunakan untuk sinkronisasi proses, yaitu untuk memecahkan masalah di mana lebih dari satu proses atau thread dijalankan secara bersamaan dan harus diatur urutan kerjanya.

Cara yang berguna untuk memikirkan semafor seperti yang digunakan dalam sistem dunia nyata adalah sebagai catatan tentang berapa banyak unit sumber daya tertentu yang tersedia, ditambah dengan operasi untuk menyesuaikan catatan itu dengan aman (yaitu, untuk menghindari kondisi balapan ) seperti unit yang diperoleh atau menjadi bebas, dan, jika perlu, tunggu sampai unit sumber daya tersedia.

Semaphores adalah alat yang berguna dalam pencegahan kondisi ras; namun, penggunaannya sama sekali bukan jaminan bahwa suatu program bebas dari masalah-masalah ini. Semafor yang memungkinkan penghitungan sumber daya yang sewenang-wenang disebut penghitungan semafor , sedangkan semafor yang dibatasi pada nilai 0 dan 1 (atau dikunci / dibuka, tidak tersedia / tersedia) disebut semaphore biner dan digunakan untuk mengimplementasikan kunci .

Konsep semafor ditemukan oleh ilmuwan komputer Belanda Edsger Dijkstra pada tahun 1962 atau 1963, [2] ketika Dijkstra dan timnya sedang mengembangkan sistem operasi untuk Electrologica X8 . Sistem itu akhirnya dikenal sebagai THE multiprogramming system . 

Shared Memory

Shared memory segments adalah teknik dalam penggunaan IPC yang memanfaatkan sebuah blok di memori yang dapat diakses oleh proses lain pada satu sistem. Satu kelebihan yang didapatkan dari penggunaan shared memory segments ini adalah terjaminnya komunikasi antar proses yang sangat cepat, namun kelemahan utamanya adalah hanya dapat digunakan dalam satu sistem operasi (mesin).

Implementasi Shared Memory Segments di PHP

Berikut adalah contoh kode pengimplementasiannya di PHP. Kode berikut untuk proses kesatu (proses1.php):

<?php
// #!/usr/bin/php -q
// deklarasi opsi
$key = 123;
$memsize = 1024; // 1024 bytes atau 1kb
$shm = shm_attach($key, $memsize);
// simpan data bertipe string
shm_put_var($shm, 1, 'Hello World');
// simpan data bertipe array
shm_put_var($shm, 2, array('Hello', 'World'));
echo "Data tersimpan di memori.....\n";
?>
Dan kode dibawah ini adalah untuk proses kedua (proses2.php):
<?php
// #!/usr/bin/php -q
// deklarasi opsi
$key = 123;
$memsize = 1024; // 1024 bytes atau 1kb
$shm = shm_attach($key, $memsize);
// ambil data di memori
echo "Data pertama : " . shm_get_var($shm, 1) . "\n";
$array = shm_get_var($shm, 2);
echo "Data kedua : {$array[0]} dan {$array[1]}\n";
?>
Kedua kode di atas saya coba jalankan pada 2 terminal yang berbeda. K
etika kode pertama saya jalankan pada terminal 1 (satu) maka hasil yang muncul adalah:
Data tersimpan di memori.....
Dan setelah kode pertama dieksekusi, saya coba jalankan kode kedua di terminal lainnya (terminal 2), dan hasil yang muncul adalah:
Data pertama : Hello World
Data kedua : Hello dan World
Demikian saya jelaskan implementasi sederhana shared memory segments pada bahasa pemrograman PHP untuk komunikasi antara proses satu dengan proses lainnya.


Message Queue

Message Queue, merupakan metode dimana proses (atau program contoh) dapat bertukar data menggunakan atau melalui sebuah interface untuk sistem yang dikelola message queue. Sebuah pesan antrian dapat dibuat oleh satu proses dan digunakan oleh banyak proses yang membaca dan / atau menulis pesan ke antrian. Misalnya, server proses dapat membaca dan menulis pesan dari dan ke pesan antrian dibuat untuk klien proses. Jenis pesan dapat digunakan untuk menghubungkan pesan dengan klien tertentu proses meskipun semua pesan pada antrian yang sama.

Contoh implementasi Message Queue dalam bahasa C++

Source Code : Pengirim Pesan

Source Code : Penerima Pesan


Komentar