GNU/Linux >> Belajar Linux >  >> Linux

Rekomendasi Komunikasi Antar Proses

D-Bus sangat berguna dan sangat stabil untuk melakukan ipc di host yang sama.http://www.freedesktop.org/wiki/Software/dbus


Seperti yang telah Anda lihat, Anda dapat menggunakan untuk komunikasi antar proses :

  • Memori bersama
  • Pipa bernama
  • Soket TCP/UDP (akhirnya yang lokal)

Memori bersama memiliki keunggulan kinerja, karena Anda tidak memiliki buffer saat mengirim/menerima pesan. Tetapi Anda harus menyinkronkan pertukaran data Anda dengan IPC lain. Itu bisa berupa semafor IPC atau ... bernama pipa atau soket.

Ketika kinerja bukan tujuan utama, saya cenderung memilih soket karena penggunaannya sederhana dan dapat diperluas ke komunikasi antar komputer.

Cara terbaik adalah mengabstraksi komunikasi Anda dengan kelas yang dapat menggunakan memori bersama saat kedua proses berada di komputer dan soket yang sama jika tidak. Kemudian Anda harus memilih antara UDP dan TCP;-)

Untuk sinkronisasi / pertukaran buffer, pilih TCP karena lebih dapat diandalkan.

Saya tidak menggunakan pipa bernama karena saya lebih suka soket untuk kemungkinan menggunakan komunikasi antar komputer dan tentu saja Anda dapat menemukan banyak pustaka soket portabel...

my2cents

EDIT:

Untuk sinkronisasi, shared mem mungkin bukan alat terbaik. Dalam kasus Anda, ini dapat digunakan dengan berbagi ruang memori kecil, dengan ruang untuk setiap proses yang menunggu perintah. Anda dapat melakukan polling untuk perintah yang masuk atau menggunakan semaphore bersama. Cara tercepat adalah proses Anda menunggu semafor bernama dan membaca ruang mem bersama untuk perintah/parameternya. Menggunakan pipa bernama memang lebih sederhana tapi tidak secepat itu. Anda pasti tidak perlu secepat itu? Pokoknya abstraksi itu di kelas yang memodelkan protokol pertukaran Anda dan coba dua cara :-)


Pilihan yang baik adalah menggunakan socketpair, sangat cepat dan efisien.


Boost memiliki pustaka InterProcess bagus yang lintas platform dan cukup intuitif.

Saya hanya mempermainkannya, jadi mungkin ada alternatif yang lebih baik di luar sana.

Namun, jika Anda tidak benar-benar membutuhkan memori bersama, saya akan tetap menggunakan pendekatan perpesanan. Anda akan menghindari kebuntuan dan kondisi balapan. Prinsip pipa sangat bagus, dan bahkan memungkinkan perilaku malas yang dapat menghemat banyak pemrosesan tergantung pada masalah yang dihadapi!


Linux
  1. Contoh Perintah ipcs di Linux

  2. /dev/shm izin berubah setelah node reboot

  3. Mengunci mekanisme untuk konsistensi memori bersama

  1. Bagaimana cara mendaftar proses yang dilampirkan ke segmen memori bersama di linux?

  2. Cara menggunakan memori bersama dengan Linux di C

  3. Mengalokasikan dan Menghapus alokasi memori melintasi batas lib bersama

  1. Memperkenalkan panduan untuk komunikasi antar-proses di Linux

  2. Penggunaan Memori Linux

  3. rkhunter:Segmen Memori Bersama yang Mencurigakan