Действительно ли очереди сообщений являются устаревшими в Linux?

Вы не можете помещать массив в searchFilters , только фильтровать объекты. Массивы требуются, если вы используете фильтр-выражения .

Попробуйте следующий код

var rs = s.load({
  id: "customsearch_inv_adj_item_search"
});

// Copy the filters from rs into defaultFilters.
var defaultFilters = rs.filters;

// Push the customFilters into defaultFilters.

defaultFilters.push(s.createFilter({
  name: "internalid",
  operator: s.Operator.IS,
  values: request.parameters.custscript_report_context.toString()
}));
// Copy the modified defaultFilters back into rs
rs.filters = defaultFilters;

var results = rs.run().getRange(0, 1000);
65
задан ValenceElectron 12 March 2014 в 18:18
поделиться

4 ответа

Лично я очень люблю очереди сообщений и думаю, что они, возможно, являются самый малоиспользуемый IPC в мире unix. Они быстрые и простые в использовании.

Пара мыслей:

  • Отчасти это просто мода. Старые вещи снова становятся новыми. Добавьте блестящего папу в очереди сообщений, и они могут стать самой новой и самой популярной вещью в следующем году. Посмотрите на Google Chrome, использующий отдельные процессы вместо потоков для своих вкладок. Внезапно люди приходят в восторг от того, что, когда одна вкладка блокируется, она не t вывести из строя весь браузер.

  • Общая память имеет что-то вроде ореола He-man. Вы не «настоящий» программист, если не выжимаете последний цикл из машины, а MQ немного менее эффективны. Для многих, если не для большинства приложений, это полная чушь, но иногда трудно сломать образ мышления, когда он закрепится.

  • MQ действительно не подходят для приложений с неограниченными данными. Потоковые механизмы, такие как каналы или сокеты, просто использовать для этого проще.

  • Варианты System V действительно вышли из моды. Как правило, по возможности используйте POSIX-версии IPC.

75
ответ дан 24 November 2019 в 15:27
поделиться

Да, я думаю, что очереди сообщений подходят для некоторых приложений. Очереди сообщений POSIX предоставляют более приятный интерфейс, в частности, вы можете давать своим очередям имена, а не идентификаторы, что очень полезно для диагностики сбоев (упрощает определение того, какой именно).

Linux позволяет вам монтировать очереди сообщений posix в виде файловой системы и видеть их с помощью «ls», удалять их с помощью «rm», что тоже очень удобно (System V зависит от неуклюжих команд «ipcs» и «ipcrm»)

14
ответ дан MarkR 24 November 2019 в 15:27
поделиться

Самые большие недостатки очереди сообщений POSIX:

  • Очередь сообщений POSIX не делает обязательным быть совместимым с select(). (Он работает с select() в Linux, но не в системе Qnx)
  • У него есть сюрпризы.

Сокет Unix Datagram выполняет ту же задачу, что и очередь сообщений POSIX. И сокет Unix Datagram работает на уровне сокетов. Можно использовать его с select() / poll() или другими методами IO-wait. Использование select() / poll() имеет преимущество при разработке основанной на событиях системы. Таким образом можно избежать занятой петли.

В очереди сообщений есть сюрприз. Подумайте о mq_notify(). Используется для получения receive-event. Похоже, мы можем что-то уведомить об очереди сообщений. Но на самом деле это регистрация для уведомления вместо того, чтобы уведомлять что-либо.

Еще большее удивление в отношении mq_notify() состоит в том, что он должен вызываться после каждого mq_receive(), что может вызвать состояние гонки (когда какой-то другой процесс / поток вызывает mq_send() между вызовами mq_receive() и mq_notify(). ]).

И он имеет целый набор mq_open, mq_send(), mq_receive() and mq_close() со своим собственным определением, которое является избыточным и в некоторых случаях несовместимым со спецификацией метода сокета open(),send(),recv() and close().

Я не думаю, что очередь сообщений должна использоваться для синхронизации. eventfd и signalfd подходят для этого.

Но it (очередь сообщений POSIX) имеет некоторую поддержку в реальном времени . Имеет приоритетные функции.

Messages are placed on the queue in decreasing order of priority, with newer messages of the same priority being placed after older messages with the same priority.

Но этот приоритет также доступен для сокета как внеполосных данных!

Наконец, для меня очередь сообщений POSIX является устаревшим API. Я всегда предпочитаю сокет Unix Datagram вместо очереди сообщений POSIX, если функции реального времени не нужны.

4
ответ дан shuva 24 November 2019 в 15:27
поделиться

Я фактически не использовал очереди сообщений POSIX, потому что я всегда хочу оставить открытыми возможность распространять мои сообщения по сети. С этим в мыслях, вы можете посмотреть на более надежный интерфейс передачи сообщений, например zeromq или что-то, что реализует AMQP .

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

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

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