Потокобезопасное использование библиотеки GraphViz через JNI - PullRequest
1 голос
/ 21 октября 2019

Я пытаюсь использовать GraphViz 2.40.1 под Linux в REST-сервисе, который выкладывает графики. Сервис представляет собой приложение Java Spring Boot. Мой текущий подход заключается в загрузке разделяемых библиотек в мою JVM и вызове собственного кода через JNI, используя функции из библиотек cgraph и gvc . Я хотел бы сделать все в памяти и избежать файлового ввода-вывода. Но я прочитал следующее предупреждение в руководстве по библиотекам GraphViz, напечатанное жирным шрифтом в конце раздела 1: « NB Использование Graphviz , поскольку библиотека не является поточнойв безопасности."

Я ищу помощи о последствиях, которые я должен извлечь из этого заявления. Никаких подробностей не приводится. Например, я могу представить, что функции, которые поддерживают изменчивое состояние об ошибках, возникших при разборе графа, не являются поточно-ориентированными, но я ими не пользуюсь. Я использую только следующие функции: agmemread и agclose из cgraph и gvContext, gvParseArgs, gvLayout, gvRenderData, gvFreeRenderData, gvFreeLayout, gvFreeContext с гвц . Я ничего не кеширую на Java, только локальные переменные и параметры метода. Будет ли такое использование библиотеки поточно-ориентированным?

Если нет, то не-поточная безопасность влияет только на использование отдельных функций, а не на функции? Так будет ли достаточно сделать мои нативные методы Java static synchronized? Или мне придется синхронизировать каждый REST-запрос?

В качестве альтернативы, я мог бы создать новый процесс ОС для каждого запроса и выполнить файловые операции с помощью точечной программы GraphViz с помощью Runtime.exec ().

Какой подход лучше всего масштабировать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...