Попытка разделить память в окнах между несколькими процессами, несколькими языками
У меня есть приложение, в котором у меня есть 3 разных процесса, которые должны запускаться одновременно на 3 разных языках в Windows:
- Процесс сбора данных, который взаимодействует с массивом датчиков. Разработчики массива датчиков были любезны предоставить нам свой исходный код C#, который я могу изменить. Это должно генерировать необработанные данные и помещать их в общую память
- Процесс "постобработки". Это код C++, который использует CUDA для максимально быстрой обработки. Это должно быть получение необработанных данных, перемещение их в графический процессор, затем получение результатов из графического процессора и передача их:
- Контроллер обратной связи, написанный на Matlab, который берет результаты постобработки и использует их для принятия решений о том, как управлять механической системой.
Я сделал курсовую работу по параллельному программированию, но эта курсовая работа все работала в Linux, где я использовал mmap.h
для координации между несколькими процессами. Это имеет смысл для меня - вы просите ОС сопоставить страницу в виртуальной памяти с адресами общей физической памяти, а ОС дает вам некоторую общую память.
Поискивая в поисках, кажется, что предпочтительный способ настроить разделяемую память между процессами в Windows (на самом деле, единственный "простой" способ сделать это в Matlab) - это использовать отображенные в памяти файлы, но это кажется мне совершенно бесполезным. Если я правильно понимаю, файл с отображением в памяти захватывает некоторое дисковое пространство и сопоставляет его с физическим адресным пространством, которое затем сопоставляется с виртуальным адресным пространством для любого процесса, который обращается к тому же файлу, отображенному в памяти.
Это кажется в три раза сложнее, чем нужно, чтобы несколько процессов отображали страницы в своем виртуальном адресном пространстве в одну и ту же физическую память. Я не чувствую, что должен делать что-то удаленно, связанное с дисковым вводом / выводом, для того, что я пытаюсь выполнить, тем более что производительность для меня является большой проблемой (в идеале я должен иметь возможность обрабатывать 1000 наборов данных в секунду хотя это не жесткий предел). Это действительно правильный способ координировать мои процессы?