2015-09-28 2 views
0

Я работаю над большим решением для обработки данных. Обычно я начинаю с одного куска больших данных, обрабатываю его, отправляю результаты на следующий инструмент, чтобы обработать его еще больше, и так далее. Ниже приводится небольшой пример того, как может выглядеть такая инструментальная цепочка. В основном он не глубокий (2 или 3 уровня), а разветвление у корня также обычно меньше 3. Но разветвление в листьях может быть легко 100.Вызовите разные подпроцессы на разных языках, идеально разделяемую память

Эти инструменты исходят из множества источников и могут быть закрыты источник. Поэтому у меня нет возможности довести ввод и вывод всех инструментов в общий формат. Кроме того, инструменты будут написаны на разных языках. C, Java, Python, Bash, ...

Конечный продукт будет работать на сервере с довольно большой оперативной памятью. Поэтому я хотел бы перейти к решению с памятью в памяти.

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

Так что теперь на мои вопросы: Прежде всего - это хороший дизайн? И второе: какой метод API/функций/программирования лучше всего подходит для вызова всех этих процессов, чтобы они делили ОЗУ? (Так что, может быть, обмен RAM не всегда возможно. Это не так важно.)

mediator 
|-- toolA 
| |-- toolA1 
| | |-- toolA11 
| | +-- toolA12 
| +-- toolA2 
|   +-- toolA21 
+-- toolB 
    |-- toolB1 
    |-- toolB2 
    +-- toolB3 

ответ

0

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

Если вы работаете в Linux, например, вы можете использовать либо /dev/shm в качестве базового каталога для вашей работы, или установить более удобный каталог как tmpfs ...

+0

Спасибо, это уже помогло, но вы можете также ответьте, как должны выглядеть мои призывы к инструментам? tempf может быть решением для обработки в памяти, но разделяемая память еще важнее для моего использования. И как это будет работать? popen(), fork(), ...? – flowit

+0

Я бы взял сценарий оболочки и обычный | < > подозреваемых. Поскольку у вас нет доступа к источникам, juste обрабатывает инструменты тура как черные ящики и только заставляет их взаимодействовать через файловую систему в памяти. – Gilles

+0

Afaik решение оболочки не позволяет использовать общую память. Не все инструменты - черные ящики, и многие из них - наша собственная работа. Даже когда я использую tempfs, у меня есть служебные файлы для копирования в сегмент памяти для следующего инструмента. Я тоже хочу этого избежать. В будущем также должна быть очередь приоритетов и, возможно, еще больше возможностей, о которых мы еще не можем вспомнить. Я не думаю, что сценарий оболочки будет достаточным. Какие варианты были бы в C, чтобы получить те же результаты? – flowit

 Смежные вопросы

  • Нет связанных вопросов^_^