Каковы все различия между каналами и очередями сообщений? - PullRequest
11 голосов
/ 18 марта 2010

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

Пожалуйста, объясните как с точки зрения vxworks, так и с точки зрения Unix.

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

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

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

Ответы [ 5 ]

15 голосов
/ 19 марта 2010

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

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

Трубы

  • Являются ли слой над очередями сообщений <--- Однонаправленный! </li>
  • Максимальное количество элементов и максимальный размер каждого элемента
  • не является потоковым интерфейсом.Семантика дейтаграмм, просто список очередей сообщений
  • При чтении БУДЕТ ОЖИДАТЬ, пока нет данных для чтения
  • При записи БУДЕТ ОЖИДАТЬ, пока в основной очереди сообщений не будет места
  • Можно использовать средство выбора для ожидания на нескольких каналах

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

1 голос
/ 20 марта 2010

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

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

0 голосов
/ 31 июля 2014

Сравнение очередей сообщений и каналов: - ОДНА очередь сообщений может использоваться для передачи данных в обоих направлениях - сообщение не нужно читать по принципу «первым пришел - первым вышел» но может обрабатываться выборочно вместо источник: см. http://www.cs.vsb.cz/grygarek/dosys/IPC.txt

0 голосов
/ 02 мая 2014

Я также обнаружил эту разницу в IPC в UNIX . В нем говорится, что разница между ними заключается в том, что очереди сообщений и каналы состоят в том, что первые сохраняют / извлекают информацию в пакетах. Пока трубы делают это посимвольно.

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

Очередь сообщений: поток анонимных данных похож на канал, но хранит и получает информацию в пакетах.

Труба

Труба: двусторонний поток данных, соединенный через стандартный ввод и выводится и читается символ за символом

Я также нашел этот вопрос здесь: Pipe vs msg queue

0 голосов
/ 18 марта 2010

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

...