Мне поручено разработать небольшой демон (на Debian Linux), который будет использовать blackbox libfoo.so для связи с внешним терминалом EFT. Существует несколько идентичных терминалов EFT (около 100), а один экземпляр libfoo.so может связываться только с одним терминалом. Существует вызов init, который по существу связывает экземпляр с терминалом.
В основном мы используем Java в нашей компании, но это, вероятно, требует реализации C++. Язык программирования еще не определен.
Поскольку нам нужно будет обрабатывать параллельную связь с несколькими терминалами (около, возможно, 10 параллельных потоков), нам нужно будет загрузить несколько экземпляров libfoo.so. Я ищу принципы проектирования, как решить такое требование (dlopen будет загружать SO только один раз, то же самое для JNI). Нужно ли мне создавать дочерние процессы? Скопируйте/вставьте SO и назовите его libfoo_1.so, libfoo_2.so и т.д. (Aargh!) Существуют ли другие решения?
благодаря
Саймон
Если в библиотеке нет API, то есть он запускает свой код с использованием механизма.init, тогда у вас нет лучшего выбора, чем разветвление родительского процесса и dlopen библиотеки в дочерних процессах.
Это довольно просто на самом деле, если вы не забыли дождаться завершения ваших дочерних процессов, когда это необходимо.
Если вам нужно обработать связь между вашими родительским и дочерними процессами, есть несколько межпроцессных взаимодействие доступных методов, такие как трубы.