這是一個NI(National Instruments)國家儀器 LabVIEW程式分享,主要是程式作業上的指導,讓還不會寫LabVIEW的人可以學習一些較基礎的功能(Function)。這篇適合已經會基礎LabVIEW或是準備考取認證CLAD、CLD程度的程式學習者。 這篇討論不可重入(Non-reentrant execution)、共享重入執行選項(Shared clone reentrant execution)和預先分配重入執行選項(Preallocated clone reentrant execution) 的不同。
默認情況下,LabVIEW將VI配置為不可重入(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會依據使用的量,創建相對數量的空間,也就是假設程式使用到20個A程式,那LabVIEW在使用之初就會創建20個空間給使用者使用。相對應”共享重入執行選項”(Shared clone reentrant execution),預先分配重入執行選項(Preallocated clone reentrant execution)並不會有資料互相干擾的現象,但是相對於記憶體的使用,就沒有這麼優化了。
下面有個整理表,比較三種選項的不同 :
使用考量 |
不可重入 Non-reentrant |
共享重入 Shared Clone Reentrancy |
預先分配重入 Preallocated Clone Reentrancy |
維護面 |
一個記憶體空間,好掌握使用狀況。 |
使用時是隨機的選擇Clone,並非固定。 |
每個使用都是獨立的記憶體空間。 |
等待時間 |
必須等到上一個使用者釋放(結束)才能接著使用。 |
若Pools中沒有足夠的clone給使用者使用,則須等待LabVIEW在pools中創建新的clone。 |
在程式運行前就已經創立好空間,完全不需等待。 |
記憶體使用量 |
最少 只有一個 |
中等 LabVIEW只為同時運行的”最大數量”創建clone。 |
最高 LabVIEW為每一個使用創建clone。 |
可以試著在VI的Example中看官方範例:
其他參考資料:
Differences Between Reentrant, Templates, and Dynamic VIs
Reentrancy: Allowing Simultaneous Calls to the Same SubVI
如果覺得文章有幫助,請不要吝嗇按下側邊的廣告唷~ 謝謝~
學習相關LabVIEW文章:
程式分享相關LabVIEW文章:
考取LabVIEW證照相關:
留言列表