同步(sync)與非同步(async) NI-VISA 函式之間的差異

綜覽

本​文件​將​說明​與 NI-​VISA 函式​相關​的​同步​與​非​同步​概念,​旨​在​協助​您​判斷​適用於​自身​應用​的​模式。

簡介

NI-​VISA 函式​相​對於​自身​呼叫​執行​緒​的​動作,​可​區​分為​同步​與​非​同步 2 種類​型。​如果​以​同步​方式​執行 NI-​VISA,​就會​讓​呼叫​執行​緒​中的​其他​程式碼​無法​執行。​這個​選項​可能​適用於​某些​情況,​例如​傳輸​大量​資料,​或​確保​資料​能​盡快​自​裝置​擷取​或​抵達​裝置。

在​進行​較低​階​的​作業​時,​呼叫​執行​緒​的​鎖定​時間​會​有所不同,​端視​於​介面​是​同步(sync)​或​非​同步(async)。​寫入​作業​的​資料​必須​自​應用​開發​環境 (ADE) 一路​向下​傳輸,​直至​電腦​所​提供​的​基礎​實體​資源。​讀取​作業​的​資料​必須​從​裝置​的​實體​資源​傳輸​至 ADE。​2 種​傳輸​方式​都​需​通過​層層​記憶體。

寫入​作業​會​透過​以下​順序​進行:

  1. 鎖定​呼叫​執行​緒。
  2. 與 VISA Write 函式​相關​的​資料,​會​從 ADE 傳輸​至 VISA 記憶體。
  3. 開始​輪​詢,​以​判斷​與 VISA Write 相關​的​所有​資料,​是否​已​自 VISA 記憶體​傳輸​至​基礎​硬體​資源​的​驅動​程式。
  4. 傳輸​作業​完成。
  5. 傳回 VISA Write 函式。

讀取​作業​則會​以​相反​順序​進行​同一​程序。

在​同步​(sync)作業​中,​呼叫​執行​緒​不會​於​步驟 4 與 5 之間​遭到​鎖定。​在​非​同步(async)​作業​中,​呼叫​執行​緒​不會​於​步驟 2 與 3 之間​遭到​鎖定。​若要​判斷​所屬​應用​應​選擇​同步​或​非​同步​模式,​請​務必​考量​您要​進行​讀寫​的​資料​量,​以及​可供​應用​使用​的​執行​緒​數量。

如果​必須​盡可能​在​短時間​內​傳輸​大量​資料,​應​考慮​以同步(sync)方式​執行​作業,​因為​這樣一來,​呼叫​執行​緒​就會​專門​用來​將​資料​傳輸​至​硬體​資源,​或是​自​硬體​資源​進行​傳輸。​以​非​同步(async)​方式​執行​作業,​則​能​讓​呼叫​執行​緒​存取​應用​中的​其他​部分,​但​如此一來,​就​需要​花​更​長時間​判斷​資料​是否​已​傳輸​至​硬體​資源,​或​已​自​硬體​資源​完成​傳輸。

如果​可供​應用​使用​的​執行​緒​數量​少於​平行​程序​數量,​選擇​以​非​同步​方式​執行 NI-​VISA 作業,​就​能​更​快速​地​將​呼叫​執行​緒​提供​予​應用​中的​其他​部分​使用。​以​同步​方式​執行​作業,​將使​呼叫​執行​緒​專供 NI-​VISA 作業​使用,​以​確保​作業​能​盡快​完成;​然而,​此舉​也會​犧牲​整體​應用​效能。

若要​在 LabVIEW 的​同步​與​非​同步​函式​之間​進行​抉擇,​請​參考​下方​的 LabVIEW 說明​連結。

其他​資源

1個讚

如果要了解同步(sync)與非同步(async)的概念,可以參考javascript的程式:https://forum.labview360.org/t/topic/30914