Я учу себя C и начинаю понимать, что мой инструктор не самый лучший; -)
Использование G CC на Linux.
Я разрабатываю базу данных временных рядов для сбора данных IOT, которая предназначена для работы на компьютерах с ограниченными ресурсами (Pi zeros, et c).
Я хочу иметь возможность использовать несколько сборщиков данных, питающих одну базу данных, и Я хочу иметь возможность добавлять / удалять сборщики данных на лету.
Первоначально я написал его для использования dlopen () для загрузки библиотек на основе файла конфигурации. Чтобы изменить библиотеки, я просто обновляю файл конфигурации, а затем отправляю основной программе SIGUSER2, чтобы она перезагрузилась. Пока все работает нормально.
Я решил, что хочу иметь возможность обмениваться данными в реальном времени с другими приложениями, поэтому после сравнения различных типов IP C я решил использовать POSIX. стиль общей памяти. Если я правильно понимаю, даже если я использую относительно небольшую структуру (скажем, 60 байт) в разделяемой памяти, она выделит 1 страницу (4 КБ) памяти?
Предполагая, что это правильно, мне кажется, что Возможно, мне было бы лучше использовать разделяемую память для связи со сборщиками данных и запускать их как отдельные программы. Я мог бы предварительно назначить отдельные переменные массивы внутри структуры для каждого сборщика данных, а затем сделать так, чтобы основное приложение сигнализировало их по очереди, чтобы они могли выполнять запись в SHM. Помимо упрощения основного кода приложения, это также несколько изолировало бы его от сборщиков данных. Если один из них потерпит крах, это не остановит основное приложение. Сборщики данных могут запускаться и останавливаться в любое время без перезагрузки основного приложения. Кроме того, поскольку это разделяемая память, другие приложения могут считывать данные с коллекторов в режиме реального времени.
Вопросы: я думаю, что для этого потребуется меньше ресурсов, поскольку мне больше не нужно будет использовать dlopen (), не так ли? кажется правильным?
Кто-нибудь видит какие-либо существенные проблемы с этой идеей?
Самое главное, я прав, полагая, что любое приложение может читать (предполагая, что чтения являются атомами c) из общего ресурса память в любое время без необходимости координировать это?