Труба против очереди сообщений

Что чем разница между очередями сообщений и каналом в Linux?

17
задан tskuzzy 20 November 2011 в 23:48
поделиться

2 ответа

Если предположить, что вы говорите об очередях сообщений posix (а не SysV):

  • Размер каналов не ограничен, а очереди сообщений - ограничены.
  • Каналы могут быть интегрированы в системы с помощью файловых дескрипторов, очереди сообщений имеют собственный набор функций, хотя Linux поддерживает select () , poll () , epoll ( ) и друзья на mqd_t .
  • После закрытия каналов требуется некоторое взаимодействие с обеих сторон для их восстановления. Очереди сообщений могут быть закрыты и снова открыты с любой стороны без согласования с другой стороной.
  • Каналы плоские, как поток, чтобы наложить структуру сообщения, вам придется реализовать протокол с обеих сторон, очереди сообщений уже ориентированы на сообщения, не нужно заботиться о том, чтобы получить, скажем, пятое сообщение в очередь.
21
ответ дан 30 November 2019 в 12:13
поделиться

На самом деле это очень разные вещи.

Самая большая практическая разница в том, что канал не имеет понятия «сообщения», это просто канал для записи () байтов в и чтения () байтов из . Принимающая сторона должна иметь способ узнать, какие данные составляют «сообщение» в вашей программе, и вы должны реализовать это самостоятельно. Кроме того, определен порядок байтов: байты будут выходить в том порядке, в котором вы их вставляете. И, вообще говоря, он имеет один вход и один выход.

Очередь сообщений используется для передачи «сообщений», которые имеют тип и размер. Таким образом, принимающая сторона может просто дождаться одного «сообщения» определенного типа, и вам не нужно беспокоиться о том, завершено оно или нет. Несколько процессов могут отправлять и получать из одной очереди.

см. man mq_overview и / или man svipc для получения дополнительной информации.

12
ответ дан 30 November 2019 в 12:13
поделиться
Другие вопросы по тегам:

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