這是一個NI(National Instruments)國家儀器 LabVIEW程式分享,主要是程式作業上的指導,讓還不會寫LabVIEW的人可以學習一些較基礎的功能(Function)。這篇適合已經會基礎LabVIEW或是準備考取認證CLADCLD程度的程式學習者。 這篇討論不可重入(Non-reentrant execution)、共享重入執行選項(Shared clone reentrant execution)和預先分配重入執行選項(Preallocated clone reentrant execution) 的不同。

默認情況下,LabVIEWVI配置為不可重入(Non-reentrant execution)。當程式撰寫時想同時運行同一個VI在多個應用時,可以選擇使用重入VI (Reentrant VI)

Non-reentrant execution

A程式選擇不可重入(Non-reentrant execution)時,VI只會使用一個記憶體空間;因此,一次只能有一個呼叫者可以運行程式A,如果其他的程式想呼叫此程式必須“等待”上一個使用者程序處裡玩才能使用A。這也是LabVIEW的默認的選項。

 

Shared clone reentrant execution

如果A程式選擇共享重入執行選項(Shared clone reentrant execution) , LabVIEW會在Pools中創建兩個實體空間給A的使用者使用(無法選擇) A程式被重複呼叫20次,並不會產生20個實體空間,而是這20個需求共用初始創建的兩個實體空間(或是依需求在創建更多的實體空間),而且使用完後會釋放這多餘的實體空間
根據當前需要僅創建必要的空間數量,可以優化了記憶體和執行速度,建議使用此選項。
值得注意的化,因為空間是”共享”而且無法指定的,所以會發生"cross talk",也就是資料互相干擾的情況

 

Preallocated clone reentrant execution

 如果A程式選擇預先分配重入執行選項(Preallocated clone reentrant execution) LabVIEW會依據使用的量,創建相對數量的空間,也就是假設程式使用到20A程式,那LabVIEW在使用之初就會創建20個空間給使用者使用。相對應共享重入執行選項”(Shared clone reentrant execution),預先分配重入執行選項(Preallocated clone reentrant execution)並不會有資料互相干擾的現象,但是相對於記憶體的使用,就沒有這麼優化了。

 

下面有個整理表,比較三種選項的不同 :

使用考量

不可重入

Non-reentrant

共享重入

Shared Clone Reentrancy

預先分配重入

Preallocated Clone Reentrancy

維護面

一個記憶體空間,好掌握使用狀況。

使用時是隨機的選擇Clone,並非固定。

每個使用都是獨立的記憶體空間。

等待時間

必須等到上一個使用者釋放(結束)才能接著使用。

Pools中沒有足夠的clone給使用者使用,則須等待LabVIEWpools中創建新的clone

在程式運行前就已經創立好空間,完全不需等待。

記憶體使用量

最少

只有一個

中等

LabVIEW只為同時運行的最大數量創建clone

最高

LabVIEW為每一個使用創建clone

 

可以試著在VI的Example中看官方範例:

 

其他參考資料:

Differences Between Reentrant, Templates, and Dynamic VIs

Reentrancy: Allowing Simultaneous Calls to the Same SubVI

 

如果覺得文章有幫助,請不要吝嗇按下側邊的廣告唷~ 謝謝~

學習相關LabVIEW文章:

進階程式學習

基礎程式學習

專題學習_LVOOP

專題學習_動態載入

程式分享相關LabVIEW文章:

基礎程式分享

進階程式分享

股票程式分享

考取LabVIEW證照相關:

CLAD

CLD

CLA準備CLA考題分析

 

arrow
arrow

    安伯伯 發表在 痞客邦 留言(0) 人氣()