Fungsi msgctl()
, msgget()
, msgrcv()
, dan msgsnd()
adalah fungsi antrian pesan 'Sistem V IPC'. Mereka akan bekerja untuk Anda, tetapi mereka cukup berat. Mereka distandarisasi oleh POSIX.
POSIX juga menyediakan serangkaian fungsi yang lebih modern, mq_close()
, mq_getattr()
, mq_notify()
, mq_open()
, mq_receive()
, mq_send()
, mq_setattr()
, dan mq_unlink()
yang mungkin lebih baik untukmu (kaya yang memalukan).
Namun, Anda perlu memeriksa yang mana, jika ada, yang diinstal pada platform target Anda secara default. Terutama di sistem tersemat, mungkin Anda harus mengonfigurasinya, atau bahkan menginstalnya karena tidak ada secara default (dan hal yang sama mungkin berlaku untuk memori bersama dan semaphore).
Keuntungan utama dari salah satu set fasilitas pesan adalah bahwa mereka telah di-debug sebelumnya (mungkin) dan oleh karena itu masalah konkurensi telah diselesaikan - sedangkan jika Anda akan melakukannya sendiri dengan memori bersama dan semaphore, Anda punya banyak pekerjaan yang harus dilakukan untuk mencapai tingkat fungsionalitas yang sama.
Jadi, (kembali) gunakan saat Anda bisa. Jika ini merupakan opsi, gunakan salah satu dari dua sistem antrean pesan alih-alih menciptakan sistem Anda sendiri. Jika pada akhirnya Anda menemukan bahwa ada hambatan kinerja atau yang serupa, maka Anda dapat menyelidiki penulisan alternatif Anda sendiri, namun sampai saat itu — gunakan kembali!
Antrean pesan Sistem V (yang dimanipulasi oleh panggilan sistem msg*) memiliki banyak keanehan dan kejanggalan. Untuk kode baru, saya sangat menyarankan menggunakan soket domain UNIX.
Karena itu, saya juga sangat menyarankan IPC penyampaian pesan melalui skema memori bersama. Memori bersama jauh lebih mudah salah, dan cenderung salah lebih parah.
Pengiriman pesan sangat bagus untuk potongan data kecil dan di mana kekekalan perlu dipertahankan, karena antrian pesan menyalin data.
Area memori bersama tidak menyalin data saat mengirim/menerima dan dapat lebih efisien untuk kumpulan data yang lebih besar dengan mengorbankan model pemrograman yang kurang bersih.