Библиотека исполнения Visual FoxPro: VFP9R.dll - является основной (главной) библиотекой Run-Time, которая обеспечивает весь функционал системы Visual FoxPro для созданных Приложений Visual FoxPro следующих типов:

Рассматриваемая библиотека Исполнения обычно размещается в следующей папке: ..\Program Files\Common Files\Microsoft Shared\VFP .

Основная библиотека исполнения модулей Visual FoxPro не может коллективно использоваться несколькими запущенными однопоточными  процессами (in-process Automation servers (.dll)). Вместо этого, каждый однопоточный процесс использует запуск отдельной, независимой копии "библиотеки поддержки" Visual FoxPro. В представленных далее Правилах определяются условия использования однопоточными серверами Автоматизации основной библиотеки исполнения Visual FoxPro:

  • При запуске однопоточного сервера автоматизации (in-process .dll) последний эксклюзивно захватывает рассматриваемую Библиотеку исполнения Visual FoxPro.

    Если указанный процесс уже запущен и монопольно использует библиотеку исполнения Visual FoxPro, то для нового запускаемого процесса создается переименованная копия указанной библиотеки, которая создается на диске рядом с сервером .Dll и загружается в память компьютера в целях поддержки нового, запускаемого Процесса. Для именования новой копии библиотеки исполнения Visual FoxPro используется базовое имя сервера Автоматизации

    Например, предположим, что запускается пользовательский однопоточный сервер с именем MyServer.dll. В этом случае будет создана Копия основной библиотеки Visual FoxPro с именем MyServerR1.dll, которая будет загружена в память для поддержки нового однопоточного процесса .dll. Аналогичная ситуация может происходит и с программным модулем .Exe Visual FoxPro, запущенном в одном потоке с рассматриваемым однопоточным сервером .dll, данная ситуация  характеризует невозможность использования одной копии библиотеки исполнения  двумя процессами, выполняемыми в одном и том же Потоке. Уточнение: сначала запускается модуль типа .Exe, а с его помощью выполняется  запуск пользовательского сервера .Dll, которые и порождает новую копию библиотеки Исполнения VFP.

  • Копия Библиотеки исполнения Visual FoxPro создается только для однопоточных процессов, запускаемых  в одном потоке с основной программой, основным Сервером.

    Это означает, два независимых Клиента, выполняемые в отдельных, собственных, независимых процессах могут загружать два различных независимых однопоточных процесса типа Visual FoxPro .dll, при этом дублирования основной библиотеки исполнения не выполняется. В этом случае, оба параллельных однопоточных процесса Visual FoxPro .dll используют одну и ту же  библиотеку исполнения Visual FoxPro в качестве Клиентов, существующих в независимых процессах.

  • Многопоточные серверы Автоматизации (Automation servers), которые создаются с указанием ключевой секции OLEPUBLIC в стандартной команде описания класса DEFINE CLASS, запущенные как однопоточные процессы .dll используют одну копию библиотеки исполнения Visual FoxPro (Run-Time Library).

    В этом случае, для многопоточных серверов, возможны случаи взаимодействия или одного сервера на другой сервер, например при изменении значений глобальных переменных PUBLIC, которые являются доступными обоим серверам , запущенным в рамках одного процесса Клиента, возможно также изменения параметров среды исполнения командами SET, и другие взаимодействия  серверов, размещенных в одном общем процессе. Обратите внимание, чтобы многопоточные серверы Automation, запущенные в одном  потоке Клиента .dll не взаимодействовали друг с другом. Созданный новый стандартный класс типа Session позволяет решать некоторые проблемы разрешения конфликтов между серверами. Использование многопоточной библиотеки исполнения Visual FoxPro, VFP9T.dll, позволяет разрешить конфликты взаимодействия независимых серверов; в этом случае рассматриваемые серверы автоматизации или объекты создаются в различных потоках, адресных пространствах, для которых создаются собственные сеансы или среды данных, которые не соприкасаются друг с другом, исключают взаимное влияние, Конфликты.

Вы можете использовать главную библиотеку исполнения Visual FoxPro для однопоточных серверов .dll. Но поскольку существуют ограничения по использованию указанной библиотеки исполнения Visual FoxPro, вы должны рассмотреть вместо этого варианты использования Многопоточной библиотеки исполнения Visual FoxPro, которая имеет шаблон имени: VFPVersionNumberT.dll. Рассматриваемая библиотека исполнения Visual FoxPro не гарантирует полную защиту Данных и значений Глобальных переменных; поэтому эта библиотека может блокировать многопоточные Объекты для исключения параллельного выполнения Программного Кода данных объектов. Если в настоящий момент выполняется Код одного из Объектов, все остальные экземпляры соответствующих объектов должны находиться в очереди на выполнение собственного Кода. После завершения выполнения программного Кода активного Объекта, управление передается очередному Объекту, начинает выполняться его Код, это относится как к свойствам так и к методам объектов. Если для многих случаев создание Очереди на выполнение Кода не является идеальным вариантом для производительности Приложения в целом, существуют некоторые приложения  - типы серверов, для которых указанный сценарий выполнения является наиболее Оптимальным.

Если однопоточные (In-Process) серверы .dll активируются в условиях таких систем, как Component Services (или Microsoft Transaction Server) в виде пакетов, когда создается экземпляр сервера в отдельном адресном пространстве, который обслуживается указанной системой Component Services, а не как независимый процесс . Кроме того, многопоточные процессы .exe поддерживаемые системой  Visual FoxPro, как серверы .dll могут загружаться в качестве отдельных процессов в одном процессе системы Component Services. Component Services генерирует или повторно использует Поток обработки для каждого Клиента, порожденного с характеристикой общего использования (OLEPUBLIC) из основного сервера Visual FoxPro. В силу того, что такие Приложения обычно требуют Полного Масштабирования (Enterprise Scalability), то в данных условиях существует потенциальная возможность возникновения конкурентного обращения различных процессов к вашему Серверу  Visual FoxPro. Если только один Клиент (экземпляр Объекта) запрашивает выполнение собственного программного Кода, то остальные Клиенты должны находиться в очереди, ожидать выполнения своих запросов. Если Рабочая Станция имеет один процессор, то описанный выше случай является вполне приемлемым, в зависимости от конкретных условий выполнения операций на вашем Сервере. Не забывайте, что один процессор может выполнять один Процесс в текущий момент времени.

NoteСовет

Рекомендуется всегда использовать многопоточную библиотеку исполнения Visual FoxPro для рабочих станций  с несколькими процессорами, так как каждый из процессоров может выполнять параллельную обработку представленных Объектов, или функционально независимых объектов. В силу того, что основная библиотека  исполнения Visual FoxPro является Однопоточной, то она блокирует одновременно выполняемый программный Код, выстраивает очередь выполнения процессов, требующих обработку, Поэтому вам необходимо проектировать ваше Приложение с учетов всех возможностей параллельного выполнения различных блоков программного Кода или созданных программных Объектов (если это возможно).

Expand imageСм. также