Наиболее эффективное межпроцессное взаимодействие в Ubuntu - PullRequest
0 голосов
/ 30 июня 2018

На моем сервере запущена симуляция C ++. В то же время существует код на C #, который в основном используется для сбора статистики. Журналы, которые генерируются кодом C ++, форматируются и используются кодом C #. Две программы работают на одной машине. Я имею в виду создание журналов моделирования как «производителя», а другой процесс, который форматирует журналы как «потребителя».

В системе работает несколько копий производителя. Фактически в системе могут одновременно работать до 20 производителей. Есть только одна копия потребителя. Журналы производителя имеют уникальные идентификаторы, которые определяют, с какого моделирования поступил журнал.

Если предположить, что у меня достаточно большого объема памяти, каков наилучший способ связи между производителями и потребителями?

В данный момент каждый производитель может создавать журналы со скоростью до 100 МБ / с. Таким образом, наибольшее количество журналов будет составлять 2 Гбит / с. Я подозреваю, что потребитель, возможно, не сможет поглотить такую ​​большую пропускную способность и может отставать от производителей. Я хочу убедиться, что производители не будут оказывать обратное давление, если потребитель недостаточно быстр. Я предполагаю, что у меня достаточно памяти для обработки необработанных журналов.

Я не уверен, каковы мои (лучшие) варианты здесь. Для решения проблемы, которую я имею в виду, я хотел бы найти гибкий метод связи, который: 1) достаточно быстрый, 2) может заботиться о многих производителях, в среде одного потребителя, 3) может использовать большой объем памяти без необходимости 4) Предоставляет простые API-интерфейсы, чтобы мне не приходилось иметь дело с подробными коммуникациями, например, мьютексированием общих ресурсов и т. д.

1 Ответ

0 голосов
/ 30 июня 2018
  • Действительно ли ваш сценарий использования требует высокопроизводительной конфигурации производитель-потребитель? Прежде всего, я бы сосредоточился на том, чтобы сделать это правильно, а потом быстро.
  • Насколько это правильно: как вы планируете это реализовать? Какой язык / технологии вы планируете использовать? Это не столько о том, чтобы быть в Ubuntu, сколько о том, как это реализовано.
  • Существует множество примеров производителей-потребителей. Это классический случай межпроцессного взаимодействия.

Итак, определите, как вы будете реализовывать это, найдите несколько примеров решений с общей памятью и обмен сообщениями и попробуйте! Сделайте это правильно, и тогда вы сможете принять более обоснованное решение о том, что лучше для вашего конкретного варианта использования.

Я полагаю, что другие не спешат ответить на ваш вопрос, поскольку не существует ни одного метода межпроцессного взаимодействия, который лучше других. Особенно, когда вопрос задается изолированно - без более широкого контекста того, для чего предназначено большее приложение. Для чего все эти журналы?

...