GNU/Linux >> Linux Esercitazione >  >> Linux

Quali sono gli svantaggi delle code di messaggi di Linux?

Le funzioni msgctl() , msgget() , msgrcv() e msgsnd() sono le funzioni della coda dei messaggi 'System V IPC'. Lavoreranno per te, ma sono abbastanza pesanti. Sono standardizzati da POSIX.

POSIX fornisce anche un set di funzioni più moderno, mq_close() , mq_getattr() , mq_notify() , mq_open() , mq_receive() , mq_send() , mq_setattr() e mq_unlink() che potrebbe essere meglio per te (un tale imbarazzo della ricchezza).

Tuttavia, dovrai verificare quale, se uno dei due, è installato per impostazione predefinita sulle piattaforme di destinazione. Soprattutto in un sistema embedded, potrebbe essere necessario configurarli o addirittura installarli perché non sono presenti per impostazione predefinita (e lo stesso potrebbe valere per la memoria condivisa e i semafori).

Il vantaggio principale di entrambi i set di strutture per i messaggi è che sono pre-debug (probabilmente) e quindi hanno già risolto i problemi di concorrenza, mentre se lo farai da solo con memoria condivisa e semafori, hai molto di lavoro da fare per raggiungere lo stesso livello di funzionalità.

Quindi, (ri)usa quando puoi. Se è un'opzione, usa uno dei due sistemi di coda dei messaggi piuttosto che reinventarne uno tuo. Se alla fine scopri che c'è un collo di bottiglia nelle prestazioni o qualcosa di simile, puoi esaminare la scrittura delle tue alternative, ma fino ad allora - riutilizza!


Le code dei messaggi di System V (quelle manipolate dalle chiamate di sistema msg*) hanno un sacco di stranezze e trucchi. Per il nuovo codice, consiglio vivamente di utilizzare socket di dominio UNIX.

Detto questo, raccomanderei caldamente anche l'IPC che trasmette messaggi su schemi di memoria condivisa. La memoria condivisa è molto più facile da sbagliare e tende a sbagliare in modo molto più catastrofico.


Il passaggio di messaggi è ottimo per piccoli blocchi di dati e dove è necessario mantenere l'immutabilità, poiché le code di messaggi copiano i dati.

Un'area di memoria condivisa non copia i dati durante l'invio/la ricezione e può essere più efficiente per set di dati più grandi al compromesso di un modello di programmazione meno pulito.


Linux
  1. Cosa rende speciale la comunità Linux?

  2. Linux vs. Unix:qual è la differenza?

  3. Linux:quali sono i diversi modi per impostare i permessi dei file ecc. su Gnu/linux?

  4. Quali sono i vantaggi di CloudLinux?

  5. Chrome su Linux:interroga il browser per vedere quali schede sono aperte?

Cos'è il comando Linux Watch + Esempi

Che cos'è la shell in Linux?

Qual è l'attuale runlevel del sistema Linux?

Linux:quali sorgenti di entropia vengono utilizzate dal kernel Linux?

Qual è il comando kill in Linux?

Cosa sono gli inode in Linux?