Должен ли я сделать subVI в предварительно выделенном VI так же, как и preallocated в LabVIEW?

У меня есть VI, тип выполнения которого задан как предварительно выделенный клон. В VI у меня есть несколько SubVI. Должен ли я установить тип исполнения SubVI так же, как в основном VI? введите описание изображения здесь

Спасибо

1 ответ

Установка ВИ для повторного входа не приводит к автоматическому повторному входу его ВПП - в противном случае это нарушило бы некоторые варианты использования для не реентерабельных ВП, таких как сериализация доступа к отдельным ресурсам или поддержание сохраненных данных состояния между вызовами. Таким образом, чтобы решить, должен ли subVI быть реентерируемым, вам просто нужно рассмотреть те же проблемы, что и вы, когда решали, должен ли родительский VI реентерироваться.

В этом посте GregR на форуме LAVA я нашел хорошее резюме соображений, которое, насколько я могу судить, до сих пор остается верным (полностью реентерабельным был более старый термин LabVIEW для предварительно выделенного реентранта клона):

  • Любой ВП, который поддерживает состояние, должен быть либо не входящим, либо полностью входящим в зависимости от его требований к этому состоянию.
  • Если есть какие-либо ВП, которые действительно нельзя вызывать одновременно, они должны оставаться не входящими. Это могут быть такие вещи, как диалоги конфигурации или изменение файла. Невозвращаемые ВП являются одним из самых простых способов сериализации доступа к ресурсам одного экземпляра.
  • Любой VI, который является частью пути к критичному по производительности коду, вероятно, должен быть полностью повторно введен. Это позволяет избежать точек синхронизации между несколькими параллельными экземплярами кода, критичного к производительности, или кода, не критичного к производительности, что мешает критичному к производительности коду.
  • Кроме того, вы можете начать отдавать предпочтение не реентерабельным или разделяемым реентерабельным, чтобы уменьшить использование памяти.
  • [...] ВП, которые всегда выполняются быстро, могут рассматриваться как не входящие. Имейте в виду, что есть разница между ВП, который всегда выполняется быстро, и тем, который обычно выполняется быстро. Все, что выполняет асинхронную связь (сеть, очереди,...), следует считать медленным, потому что это может занять больше времени, чем ожидалось.
  • Создание ВП, которые вызываются из множества мест, в которых используется повторное поступление вместо полного повторного входа, немного увеличит время выполнения, но может значительно сократить количество требуемых экземпляров и, следовательно, использование памяти.
Другие вопросы по тегам