Каковы все различия между каналами и очередями сообщений?

Каковы все различия между каналами и очередями сообщений?

Объясните обоих с точек зрения Unix и vxworks.

Я думаю, что каналы являются однонаправленными но очередями сообщений, не.

Но каналы внутренне не используют очереди сообщений, затем каким образом каналы являются однонаправленными но очередями сообщений, не?

Каковы другие различия, о которых можно думать (от дизайна или использования или других перспектив)?

13
задан aks 18 March 2010 в 14:42
поделиться

3 ответа

"Каналы VxWorks различаются значительно от каналов UNIX », - говорится в документации vxWorks, и они не шутят. Вот справочные страницы .

Похоже, не будет большим преувеличением сказать, что единственное сходство между конвейерами Unix и vxWorks заключается в том, что они являются формой IPC. Возможности разные, API разные, и реализации, безусловно, очень разные.

1
ответ дан 1 December 2019 в 23:14
поделиться

Очереди сообщений:

  • ОДНОНАПРАВЛЕННЫЕ
  • Фиксированное количество записей
  • Каждая запись имеет максимальный размер
  • Вся память очереди (# записей * размер записи), выделенная при создании
  • Подобна дейтаграмме поведение: чтение записи удаляет ее из очереди. Если вы не прочитаете все данные, остальные будут потеряны. Например: отправить 20-байтовое сообщение, но получатель прочитает 10 байтов. Остальные 10 байтов потеряны.
  • Задача может быть отложена только в одной очереди с помощью msqQReceive (есть способы изменить это с помощью альтернативного API)
  • При отправке вы будете отложены, если очередь заполнена (и вы не выполняете NO_WAIT)
  • При получении вы будете ожидать, если очередь пуста (и вы не делаете NO_WAIT).
  • Тайм-ауты поддерживаются при приеме и отправке

Каналы

  • Это слой поверх очередей сообщений <--- Однонаправленный!
  • Иметь максимальное количество элементов, и каждый элемент имеет максимальный размер.
  • НЕ ЯВЛЯЕТСЯ ПОТОКОВЫМ ИНТЕРФЕЙСОМ. Семантика дейтаграммы, просто перечислить очереди сообщений
  • При чтении БУДЕТ ОТКЛЮЧАТЬ до тех пор, пока не появятся данные для чтения
  • При записи БУДЕТ ОТКЛЮЧАТЬ до тех пор, пока в основной очереди сообщений не появится место
  • Можно использовать средство выбора для ожидания на нескольких каналах

Это то, о чем я могу думать прямо сейчас.

17
ответ дан 1 December 2019 в 23:14
поделиться

MQ имеют постоянство ядра и могут быть открыты несколькими процессами.

-1
ответ дан 1 December 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: