поточно-ориентированная разделяемая библиотека, вызываемая из Progress 9.1d

Я работаю над проектом, который включает в себя устаревшие системы, написанные в Progress 9.1d. Эти системы должны использовать общую библиотеку, которую я запрограммировал на языке C.

Люди из Progress сказали мне, что приложение работает через нечто, называемое «сервером приложений». У этого сервера приложений есть то, что они называют «агентами», и когда пользователь запускает приложение «Прогресс», сервер приложений создает экземпляр (я полагаю, он так и называется) агента для участия в петиции. Количество агентов ограничено, и когда лимит превышен, петиции ставятся в очередь.

Итак, каждый из этих агентов выполняет код Progress, который использует мою общую библиотеку. Я боюсь, что между ними могут быть конфликты данных. В разделяемой библиотеке нет ни глобальных, ни статических переменных. Все данные, которые использует функция разделяемой библиотеки, создаются внутри нее, все переменные являются локальными.

Общая библиотека и сервер приложений Progress находятся на одном сервере UNIX HP-UX 11.1

Я предполагаю, что у каждого нового агента есть собственная копия данных приложения Progress, но если это так, я не знаю, происходит ли то же самое с разделяемой библиотекой...

Если у кого-то есть опыт использования общих библиотек с Progress, нужно ли предпринять какие-то меры для обеспечения параллелизма?

До сих пор наши тесты были без проблем.

Буду рад любому комментарию, спасибо.


person user1274605    schedule 15.01.2014    source источник
comment
Ура, добро пожаловать в каменный век! :) А если серьезно, то вы сказали, что в вашей разделяемой библиотеке нет компонентов, которые являются общими для методов, так что вас беспокоит насчет коллизий? Похоже, ты хороший. Кроме того, чтобы ответить на ваш вопрос о сервере приложений: код кэшируется приложением, а не самим сервером приложений (который является своего рода посредником).   -  person Taegost    schedule 15.01.2014


Ответы (1)


Каждый экземпляр сервера приложений — это отдельный процесс UNIX. Так что ваши опасения по поводу общих данных не должны возникать.

Совместно используемые библиотеки могут работать и могут вызываться Progress даже в таком древнем и устаревшем выпуске, как 9.1D, но Progress является агрессивно однопоточным, поэтому, если ваша общая библиотека каким-либо образом использует потоки, она может выйти из строя.

Кто отвечает за вызов общей библиотеки из кода 4GL? Ты? Или разработчики Progress? В любом случае это может быть полезно:

http://dbappraise.com/ppt/shlib.pptx

person Tom Bascom    schedule 15.01.2014
comment
Спасибо за Ваш ответ. Ответственные разработчики Progress, я поделюсь с ними вашим документом. :) Нет, к счастью, общая библиотека не использует потоки. Когда вы сказали, что каждый экземпляр сервера приложений — это так называемые агенты, верно? - person user1274605; 16.01.2014
comment
Это правильно. Агент — это собственный процесс — обычно вы видите его в ps как _proapsv (это исполняемый файл по умолчанию — некоторые поставщики переименовывают его по разным причинам). - person Tom Bascom; 16.01.2014
comment
Отображение типов данных и обратные вызовы — две другие проблемы. Простые типы данных (int, float, string) подходят. Структуры и указатели могут быть проблемой (не всегда невозможными, но могут быть проблемой). Обратные вызовы, вероятно, вообще не будут работать. - person Tom Bascom; 16.01.2014