精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

LabVIEW多線程編程解析 LabVIEW的VI優先級和并行循環等相關知識

華穗科技 ? 來源:華穗科技 ? 作者:華穗科技 ? 2023-11-10 10:20 ? 次閱讀

軟件開發過程中總會遇到需要多線程同步運行的情況,尤其是一些復雜的測試系統和大型項目,僅靠單線程運行的程序是遠遠無法滿足用戶需求的,甚至可以說在復雜測試系統的軟件開發中,多線程運行是最基本的。

所以不論使用什么開發環境都需要工程師們掌握如何進行多線程編程。在多線程開發這一點上LabVIEW有其獨到的優勢,那就是LabVIEW是自動并行運行的語言,它可以自動多線程運行。

下面就小編就和大家淺談一下LabVIEW的線程編程的相關知識吧!

本文教程

LabVIEW多線程編程基礎概念

一、單線程與多線程:

LabVIEW在5.0開始才支持多線程,在此之前,LabVIEW其實是單線程運行的。在了解LabVIEW多線程之前,我們需要了解單線程的含義:單線程并不是指代碼固定在某個線程上一直執行,系統有可能也會將它切換到其他線程上去運行,但是在同一時刻它只會存在于單個線程中,不會有多個線程去同時運行這段代碼。而多線程指的是在同一時刻系統可能會在多個線程中同時運行代碼。

在LabVIEW中只要程序框圖中的代碼可以并行運行(功能模塊之間沒有連線關系,比如兩個獨立的While循環),那么LabIVEW在運行這段代碼時就會自動將它們分配在多個線程內同時運行。

一般情況下,LabVIEW運行VI時至少會開辟兩個線程,一個是負責刷新界面、響應用戶操作控件等界面操作功能的用戶界面線程;另外一個或多個線程是負責執行除界面操作以外的其他工作,稱之為執行線程。

二、LabVIEW的多線程:

如下圖所示,這是兩個獨立運行的While循環,這段代碼在執行時會被LabVIEW自動分配到兩個線程中去執行。

d4980e74-7f6e-11ee-939d-92fbcf53809c.png

通過上面這個示例就可以看到,在LabIVEW中編寫多線程程序十分簡便。由于兩個循環中沒有延時函數,程序會十分快速地執行,所以對系統來說它們是兩個較為繁重的線程,一般對于這種任務繁重的線程,多核CPU計算機還會將它們額外安排到不同的CPU內核上去運行。如下圖所示,運行上述示例以后系統自動將它們分配到不同的內核中去運行,這樣可以合理利用CPU資源,提高程序運行速度,節省程序執行時間,防止某個CPU內核被100%占用導致卡死。

d4b53ba2-7f6e-11ee-939d-92fbcf53809c.png

三、LabVIEW的執行系統:

LabVIEW自己有一套調度系統,負責代碼的調度和運行,這就是LabVIEW的執行系統。LabVIEW目前有六個執行系統,分別是:用戶界面、標準、儀器I/O、數據采集以及其他1、其他2執行系統。一個應用程序中的眾多子VI是可以分別放在不同的執行系統里運行的,用戶可以在VI屬性中指定VI的執行系統。

d4cd80ae-7f6e-11ee-939d-92fbcf53809c.png

在LabVIEW支持多線程后,不同執行系統中的代碼就被劃分在了不同的線程下運行。其中用戶界面執行系統只有一個線程,那就是一開始提到的用戶界面線程;其他執行系統可以為代碼開辟多個線程。

四、LabVIEW的VI優先級:

用戶可以在VI屬性中指定VI的優先級屬性。LabVIEW VI優先級有后臺、標準、高于標準、高、實時這六個檔次。其中前五項是從低到高的優先級順序,優先級越高越容易搶占到CPU資源。而子程序這一項比較特殊,當一個VI的優先級被設置為子程序時,VI前面板、調試信息會被移除(不能用作界面、不能調試),同時在執行該VI時應用程序會短暫變為單線程執行,即在這個VI執行結束之前,不會被別的線程打斷;這意味著子程序的VI在執行時會得到最多的CPU資源,所以某些純算法的VI,假如不是特別耗時就可以設置為子程序的優先級。

d4e6877a-7f6e-11ee-939d-92fbcf53809c.png

在設置VI優先級時需要注意:1、在一個應用程序中,提高一個VI的優先級并不能縮短應用程序整體占用CPU的時間,只是意味著這個VI會比其他VI更多、更容易搶占到CPU資源,所有VI占用CPU的整體時間是不會變的;2、低優先級相對于高優先級的VI,并不是高優先級的VI會一定先執行,只是說明高優先級VI有更高的概率搶占到CPU資源;

在單核CPU的計算機上,LabVIEW最多為每個執行系統下的每個檔次優先級開啟四條線程,如果是多核CPU,每增加一個CPU內核,可開辟的線程數目翻倍。實際上一個程序在運行時并不會有那么多優先級和執行系統設置,所以并不會開辟很多線程。

小編這里提醒大家編程時線程不是越多越好,因為線程的開辟、銷毀、切換等都是需要消耗資源的,如果線程開的太多,切換線程太頻繁,反而會導致程序執行的效率降低。

五、定時結構:

對于多核CPU的計算機,有時候操作系統自動分配線程至CPU內核的策略可能并不是最優解,于是就需要我們人工去指定,即某個線程應該被指定到計算機的哪個CPU內核上執行。現在絕大部分計算機的CPU性能都足夠強大,所以一般情況下,只有對于執行效率要求極其苛刻的程序才會需要我們人工去指定CPU內核的分配方案。

需要人工指定CPU分配方案時,我們可以使用定時結構來替換程序中原有的結構,定時結構可以更加精確的執行某段程序代碼,并且它還包含一些用于高精度定時、處理器分配等的輔助功能,定時結構包含定時循環結構和定時順序結構,如下圖所示:

d4f743d0-7f6e-11ee-939d-92fbcf53809c.png

可以看到相對于普通的循環或者順序結構,定時結構左側有一些輸入端,可以進行一些配置,這些配置可以在程序運行過程中使用輸入接線端進行動態設置,也可以在配置面板中靜態進行設置,如下圖所示:

d50e55c0-7f6e-11ee-939d-92fbcf53809c.png

在該配置面板中,處理器分配模式就是用來指定CPU的設置,可以將它選擇為手動模式,然后在后面選擇要分配的CPU內核名稱即可。在實際應用中,我們可以將按照執行任務的耗時來劃分,將耗時比較多的任務單獨指定在一個CPU中,不同CPU中平衡分配任務,提升程序整體運行的速度。

六、并行循環

前面提到當兩個循環并行運行,它們之間沒有數據連線時LabVIEW會將它們劃分到兩個不同的線程中去執行。那么當只有一個循環時,一般情況下,LabVIEW只會為此循環開辟一個線程來執行,但是如果這個循環中的代碼本身就比較耗時,那么這段代碼的執行效率就會十分低,如下圖所示:

d5306d2c-7f6e-11ee-939d-92fbcf53809c.png

上述示例中的這段代碼執行一次需要859ms,屬于相當耗時的代碼了,它每次循環都需要經過大量數學運算,對于這種循環,可以將它配置成并行運行模式,在循環上右鍵并選擇“配置循環并行”

d5919cb4-7f6e-11ee-939d-92fbcf53809c.png

選擇之后就會看到一個配置窗口:

d59b74d2-7f6e-11ee-939d-92fbcf53809c.png

首先我們需要先勾選“啟用循環迭代并行”,然后配置生成的并行循環實例數量,一般來說實例數最高設置成計算機的內核總數量,設置數量超過計算機的內核數量就沒有意義了,不會再繼續提高程序的運行速度。

d5b6a982-7f6e-11ee-939d-92fbcf53809c.png

上圖是將原先的示例改為并行循環并設置了8個線程之后的執行情況,可以看到它的運行時間顯著減少,程序的執行效率得到了很大的提升。

注意事項:

1、配置并行循環要求循環內部的代碼不能依賴之前循環運算的結果(比如不能使用反饋節點和移位寄存器),因為如果程序依賴之前循環運算的結果就表明這個程序不能并行運行,必須強制迭代按順序執行,如果強行配置為并行循環會導致VI報錯無法運行。

d5c6c920-7f6e-11ee-939d-92fbcf53809c.png

2、配置為并行循環的程序無法在循環內部使用探針等調試手段,如果需要調試可以勾選配置循環并行面板中的“允許調試”,勾選之后它會強制所有并行的線程按照順序迭代,這樣會使并行運行的執行效率降低到之前的單線程運行的水平,所以一般代碼調試完成后一定要記得取消此勾選項。

d5e3fba8-7f6e-11ee-939d-92fbcf53809c.pngd5f4bdd0-7f6e-11ee-939d-92fbcf53809c.png

七、內容總結

1、明確LabVIEW單線程和多線程的概念;

2、了解LabVIEW自動多線程的相關知識;

3、熟悉LabVIEW執行系統的相關知識;

4、掌握LabVIEW VI優先級設置及其注意事項;

5、學習定時結構和并行循環的使用及注意事項;

以上就是有關LabVIEW多線程編程第一章節的所有內容啦,歡迎大家一起交流探討!下一章小編將會為大家帶來LabVIEW多線程之間的數據傳遞相關的分享,敬請期待!

對LabVIEW編程及相關知識感興趣的工程師們,歡迎持續關注、留言和點贊,也可以私信小編各位的技術困惑和技術需求,以獲取參加免費線下培訓和技術交流的機會哦。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • LabVIEW
    +關注

    關注

    1964

    文章

    3652

    瀏覽量

    322546
  • Vi
    Vi
    +關注

    關注

    3

    文章

    78

    瀏覽量

    21025
  • 程序
    +關注

    關注

    116

    文章

    3778

    瀏覽量

    80860
  • 多線程
    +關注

    關注

    0

    文章

    277

    瀏覽量

    19923
  • 線程編程
    +關注

    關注

    0

    文章

    5

    瀏覽量

    6126
收藏 人收藏

    評論

    相關推薦

    LabVIEW多線程編程數據傳遞教程

    很多時候在一個VI的不同線程或者不同VI的不同線程中需要有一些交互——這些線程并不能完全獨立運行,需要一定的數據通信才能正確執行,這時就需要
    的頭像 發表于 11-24 10:05 ?6386次閱讀
    <b class='flag-5'>LabVIEW</b><b class='flag-5'>多線程</b><b class='flag-5'>編程</b>數據傳遞教程

    LabView多線程語言

    Thread),用于處理界面刷新,用戶的操作;還有一個執行線程,后臺工作。2。LabVIEW 是自動多線程編程語言,只要
    發表于 06-08 10:13

    LABVIEW深入探索之性能與內存管理

    性能了解VI的執行特性LABVIEW執行系統執行系統是LABVIEW重要的組成部分,負責實際運行我們的代碼。啟動自動并行機制對于LABVIEW
    發表于 09-28 17:32

    每日一教labview視頻教程【1.10】labview多核并行運行編程

    隨著多核成為處理器的發展主流,對于并行編程多線程編程)也成為了開發人員最大的難題,而LabVIEW憑借自身的
    發表于 01-10 13:48

    labview多線程編程

    子曰:何為labview多線程編程
    發表于 03-11 15:46

    this vi初始化優先級

    各位好:小弟初學labview,使用this vi初始化的時候,先后順序不統一呀,能設置優先級嗎?經常出現for循環完了才初始化各組件。。。
    發表于 01-20 20:30

    labview多線程技術

    labview開發多線程技術難道是在同一個框圖中多用幾個WHILE循環結構嗎?請玩過的大神指教
    發表于 07-25 10:33

    NI LabVIEW的多核編程技術指南

    并行硬件技術概覽:多處理器、超線程、雙核、多核與FPGA 1-2多線程與多任務的區別 3-5借助LabVIEW應對多核編程的挑戰 6-9升
    發表于 07-01 10:43 ?0次下載

    LabVIEW是自動多線程語言

      一般情況下,運行一個 VILabVIEW 至少會在兩個線程內運行它:一個界面線程(UI Thread),用于處理界面刷新,用戶對控件的操作等等;還有一個執行
    發表于 03-27 17:25 ?5263次閱讀

    什么是多線程編程?多線程編程基礎知識

    摘要:多線程編程是現代軟件技術中很重要的一個環節。要弄懂多線程,這就要牽涉到多進程。本文主要以多線程編程以及
    發表于 12-08 16:30 ?1.3w次閱讀

    鴻蒙內核源碼:32優先級的進程和線程調度

    先看四個宏定義,進程和線程線程就是任務)最高和最低優先級定義,[0,31]區間,即32優先級用于調度,CPU根據這個來決定先運行哪個進
    的頭像 發表于 04-24 11:18 ?2026次閱讀

    uC/OS-II學習筆記——優先級反轉與優先級繼承機制

    優先級反轉,是指某同步資源被較低優先級的進程/線程所擁有,較高優先級的進程/線程競爭該同步資源未獲得該資源,而使得較高
    發表于 02-09 10:33 ?2次下載
    uC/OS-II學習筆記——<b class='flag-5'>優先級</b>反轉與<b class='flag-5'>優先級</b>繼承機制

    labview AMC多線程

    labview_AMC多線程
    發表于 08-21 10:31 ?30次下載

    淺談LabVIEW線程編程相關知識

    LabVIEW中只要程序框圖中的代碼可以并行運行(功能模塊之間沒有連線關系,比如兩個獨立的While循環),那么LabIVEW在運行這段代碼時就會自動將它們分配在多個線程內同時運行。
    發表于 11-10 10:21 ?1239次閱讀
    淺談<b class='flag-5'>LabVIEW</b>的<b class='flag-5'>線程</b><b class='flag-5'>編程</b>的<b class='flag-5'>相關</b><b class='flag-5'>知識</b>

    LabVIEW SMO 的原理、用法和實際應用

    LabVIEW SMO (Shared Memory Option) 是一種在 LabVIEW 中用于多線程編程和數據共享的選項。它允許多個并發的
    的頭像 發表于 12-27 16:47 ?2117次閱讀