Что чем разница между очередями сообщений и каналом в Linux?
Если предположить, что вы говорите об очередях сообщений posix (а не SysV):
select ()
, poll ()
, epoll ( )
и друзья на mqd_t
. На самом деле это очень разные вещи.
Самая большая практическая разница в том, что канал не имеет понятия «сообщения», это просто канал для записи ()
байтов в и чтения ()
байтов из . Принимающая сторона должна иметь способ узнать, какие данные составляют «сообщение» в вашей программе, и вы должны реализовать это самостоятельно. Кроме того, определен порядок байтов: байты будут выходить в том порядке, в котором вы их вставляете. И, вообще говоря, он имеет один вход и один выход.
Очередь сообщений используется для передачи «сообщений», которые имеют тип и размер. Таким образом, принимающая сторона может просто дождаться одного «сообщения» определенного типа, и вам не нужно беспокоиться о том, завершено оно или нет. Несколько процессов могут отправлять и получать из одной очереди.
см. man mq_overview
и / или man svipc
для получения дополнительной информации.