Должен ли я сделать subVI в предварительно выделенном VI так же, как и preallocated в LabVIEW? - PullRequest
0 голосов
/ 11 мая 2018

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

Спасибо

1 Ответ

0 голосов
/ 11 мая 2018

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

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

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