




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、LabVIEW與多線程Intelligent Electronics InstituteHuazhong University of Science & TechnologyHttp:/2目錄多線程技術LabVIEW多線程環境LabVIEW多線程程序設計LabVIEW線程通信與同步提示與建議習題Http:/33.1多線程技術n 基本概念 程序程序是指一個靜態的指令序列; 進程進程為執行程序指令的線程而保留的一系列資源的集合; 線程線程是操作系統用來調度執行的最小單位。程序進程線程Http:/3.1多線程技術n 多線程多線程在運行一個多線程的程序時,為了運行所有的線程,操作系統為每個獨立
2、線程安排一些CPU時間,每個線程在使用完時間片后交出控制權,系統再將CPU時間片分配給下一個線程。由于每個時間片足夠短,這樣就造成一種假象:好像這些線程在同時運行。 (a) 從用戶角度看多線程 (b) 從系統角度看多線程 應用多線程技術的目的就是盡可能地利用CPU時間。4Http:/3.1多線程技術n 多處理器多處理器多處理器是指在一臺計算機中有兩個以上的處理器,每個處理器可以同時執行不同的線程。 在多處理器的作用下,多個線程可以同時執行,從而以更少的時間完成更多的任務。5Http:/3.1多線程技術n 線程調度線程調度 無論進程還是線程都是操作系統中進行CPU任務調度的程序單元; CPU調度
3、一個進程時必定發生一個進程上下文切換; CPU調度一個進程內的多個線程時則可以避免上下文切換的發生; 采用多線程可以減少因上下文切換導致的CPU時間開銷。6Http:/3.1多線程技術n 在多進程操作系統中,當創建一個進程時系統同時就為進程創建了一個主線程,由這個主線程生成額外的子線程,然后這些線程又可以生成更多的子線程,所有的線程共同構成了一個進程的線程集。7Http:/3.1多線程技術n 線程優先級線程優先級 線程被調度的先后順序是依據線程的優先級來完成的; 當一個線程被創建時,操作系統將分配給線程一個優先級; 在調度周期的開始,系統從線程的就緒隊列中選擇擁有最高優先級的線程來執行。8Ht
4、tp:/3.1多線程技術n 影響線程調度的其它因素影響線程調度的其它因素 線程調度除了依據線程優先級以外,還受系統調度策略和算法等因素的影響; 調度算法的優劣直接影響到CPU運行的效率和性能,不佳的調度算法不僅可能降低系統的反應時間,而且可能導致某些線程或進程長時間得不到調度; 目前操作系統一般采用搶占式調度。9Http:/3.1多線程技術n 搶占式調度搶占式調度搶占式調度是指當一個線程或進程所分配的時間片過期或有更高優先級的線程或進程出現時,如果調度進程還需要進行上下文的切換,操作系統將暫停其在CPU上繼續執行,調度另外的線程或進程到CPU上執行。 搶占式調度阻止了任何線程長期占用處理器的情
5、況發生; 最短任務優先調度策略偏向于預估完成時間最短的線程,有利于迅速減少系統中線程數量,提高處理器的吞吐量。10Http:/3.1多線程技術n 線程通信線程通信 如果線程間的通信發生在一個進程中,可以通過從堆棧片段傳遞值的方式來完成; 如果一個進程中的線程同另一個進程中的線程進行通信,則不能以線程通信的方式來處理,而必須以進程間通信來對待,采取如環境變量、命名管道、共享內存等技術手段來解決; 在多數情況下,線程通信的代價要小于進程通信的代價。11Http:/3.1多線程技術n 線程同步線程同步線程同步一般分為數據同步、設備同步和任務同步3種情況。 數據同步用于保證并發線程以一種安全的模式訪問
6、內存塊; 設備同步用于多個線程訪問單一設備時對實時操作和優先權的嚴格控制,阻止線程破壞設備的狀態; 任務同步用于加強線程間邏輯關系上的前置條件和后置條件。12Http:/3.2LabVIEW多線程環境n 支持多線程模式的程序設計語言支持多線程模式的程序設計語言 用函數直接創建多線程用函數直接創建多線程:在Visual C+語言中,提供了封裝在Win32 API中的 CreateThread、ExitThread等函數方法的CWinThread類,為創建多線程應用程序提供了基本框架; 從執行系統和數據流控制數據流控制兩個層次實現多線程程序設計:LabVIEW開發環境。13Http:/3.2Lab
7、VIEW多線程環境n LabVIEWLabVIEW執行系統執行系統類似于Java虛擬機,是特有的中間執行平臺。 LabVIEW程序框圖編譯生成的,并不是操作系統平臺上的可執行程序代碼,而是一種特有的程序組織代碼,這種代碼必須通過LabVIEW的執行系統來實現在操作系統上的運行; 在創建LabVIEW發布的可執行程序時,對于沒有LabVIEW執行系統環境的計算機需要在發布組件選項中包含LabVIEW運行引擎(Run-Time Engine)。14Http:/3.2LabVIEW多線程環境n 執行子系統執行子系統(6(6個個) )用戶界面(user interface)、標準(standard)、
8、儀器I/O(instrument I/O)、數據采集(data acquisition)、其他1(other 1)、其他2(other 2)。 u在“文件VI屬性執行”面板中可以對執行子系統進行更改。15注意:“與調用方相同”(same as caller)不是一個子系統,它表示其執行子系統與調用該子VI的程序的執行子系統相同Http:/3.2LabVIEW多線程環境n 子系統分工子系統分工對執行系統進行細分的最初目的在于將不同用途的VI嚴格分配到不同的執行子系統中,各個執行子系統具體分工如下:用戶界面子系統用戶界面子系統:主要用于屏幕畫圖,以及鍵盤、鼠標輸入等,這個子系統也用于特定類型的VI
9、執行。標準子系統標準子系統:如果需要為用戶界面保持專用運行時間,應當為VI指定這個子系統。儀器儀器I/OI/O子系統子系統:該子系統主要用于完成與VXI系統、GPIB系統、串行儀器或網絡之間的通信。數據采集子系統數據采集子系統:該子系統主要用于數據采集。其他子系統其他子系統1 1:當程序中的任務需要自己的線程時使用。其他子系統其他子系統2 2:當程序中的任務需要自己的線程時使用。16Http:/3.2LabVIEW多線程環境n 用戶界面子系統用戶界面子系統 用戶界面子系統是LabVIEW系統運行時必須加載的,而其他幾個執行子系統則是可選的; 用戶界面子系統實際上是一個單線程系統,只有一個用戶界
10、面線程執行各種任務; 在LabVIEW中所有與用戶界面相關的操作都由用戶界面子系統負責,其他執行子系統不負責管理用戶界面。17Http:/3.2LabVIEW多線程環境n 線程數量設置線程數量設置 無法通過編寫程序來實現對LabVIEW執行系統中線程變化的控制,但作為輔助工具,LabVIEW提供了一個線程配置程序threadconfig.vi,它位于LabVIEW安裝目錄vi.lib utilitiessysinfo.llb中; 一般情況下,不需要修改LabVIEW系統環境的默認線程數量設置。當LabVIEW系統運行在一個專用計算機專用計算機上,可以根據計算機的硬件配置情況適當增加線程的數量。
11、而在一個非專用計算機非專用計算機上增加LabVIEW系統中線程的數量,則可能影響其他程序的運行,甚至可能由于線程過多導致計算機整體性能的下降。18Http:/3.2LabVIEW多線程環境n 線程配置程序線程配置程序threadconfig.vithreadconfig.vi 線程配置程序界面 線程配置對話框19Http:/3.2LabVIEW多線程環境n VIVI優先級優先級LabVIEW程序優先級的設置方法可以分為程序控制和系統控制兩種。程序控制方法程序控制方法是指用戶通過在程序框圖中使用等待函數來控制程序內部并行任務的執行順序;系統控制方法系統控制方法是通過在VI屬性中選擇相應的VI執行
12、優先級別來控制VI的執行順序。 20任務1,優先級高任務2,優先級低Http:/3.2LabVIEW多線程環境n 注意注意VIVI的優先級問題的優先級問題 考慮修改VI的優先級設置時要慎重小心,一般情況下,用戶創建VI的默認為普通優先級,應盡量避免修改VI的優先級,只有那些特殊的VI才被指定為非普通的優先級; 在當一個VI確有必要使用非普通的優先級時,應當遵循這條原則:不要讓高優先級的VI持續運行; VI優先級是隱含的,只能通過查詢VI屬性才能了解。21Http:/3.2LabVIEW多線程環境n 子程序優先級子程序優先級并不是一個真正的優先級,它并不標識VI的相對優先級別,僅用來標識一類特殊
13、的LabVIEW程序,具有該優先級的VI不會被加入到執行子系統的運行隊列中。 鮮明的特征:VI的用戶界面不能更新,只能調用子程序優先級的子VI,不能調試等; 子程序優先級的VI可以調用其他子程序優先級的VI,不能調用其他優先級的VI。22Http:/3.2LabVIEW多線程環境n 子程序優先級子程序優先級當選擇了子程序優先級后,以下幾個選項就不能選擇了:打開時運行(Run when opened);調用時掛起(Suspend when called);運行時自動處理菜單(Auto handling of menus at launch);允許調試(Allow debugging);調用時清除
14、顯示控件(Clear indicators when called)。23Http:/3.2LabVIEW多線程環境n 子程序優先級子程序優先級VIVI示例示例“字符串”選項板下的“刪除空白”(Trim Whitespace.vi)24Http:/3.2LabVIEW多線程環境n 多線程程序的優勢多線程程序的優勢多線程技術在LabVIEW程序中充分發揮了重要的作用,具有以下幾點優勢: 更高效地使用CPU; 更好的系統可靠性; 更優化的多處理器性能。25Http:/3.3LabVIEW多線程程序設計n 線程優化線程優化示例1:要求要求:監控重物的速度變化過程,繪制S-t(距離時間)曲線、V-t(
15、速度時間)曲線、V-S(速度距離)曲線并顯示所有數據。初始程序分初始程序分3 3步執行步執行26第一幀:得到S-t數據Http:/3.3LabVIEW多線程程序設計n 線程優化線程優化27第二幀:得到V-t數據Http:/3.3LabVIEW多線程程序設計n 線程優化線程優化28第三幀:得到V-S數據Http:/3.3LabVIEW多線程程序設計n 線程優化線程優化發揮多線程的優勢,將程序優化為并行結構發揮多線程的優勢,將程序優化為并行結構29并行結構下的優化程序Http:/3.3LabVIEW多線程程序設計n 線程優化線程優化示例2:以一個數據采集程序為例來介紹最大化數據流的編程。原程序由順
16、序結構實現原程序由順序結構實現30第1幀有兩個執行流程:一是產生波形;二是配置模擬輸入和輸出。Http:/3.3LabVIEW多線程程序設計n 線程優化線程優化31第2幀的功能是發送波形數據。Http:/3.3LabVIEW多線程程序設計n 線程優化線程優化32第3幀的功能是采集波形。Http:/3.3LabVIEW多線程程序設計n 線程優化線程優化33第4幀的功能是停止輸入和輸出的任務。Http:/3.3LabVIEW多線程程序設計n 線程優化線程優化線程優化后的程序框圖線程優化后的程序框圖34這個程序是按照配置、產生波形、讀取波形的順序執行的。只有等到前一步驟中錯誤簇的信息到達后,下一步驟
17、才能執行。輸入和輸出配置VI函數采用并行結構,并使用合并錯誤函數來保證只有輸入和輸出都已經配置好之后才可以產生波形。Http:/3.3LabVIEW多線程程序設計n 超線程程序超線程程序無論是超線程計算機還是多處理器計算機,都可以采用超線程機制對應用程序進行性能優化。示例:計算所有大于2的質數。初步想法初步想法35單循環解質數程序框圖。Http:/3.3LabVIEW多線程程序設計n 超線程程序超線程程序優化程序優化程序36雙循環解質數程序框圖。Http:/3.3LabVIEW多線程程序設計n 可重入技術可重入技術可以在“文件VI屬性執行”框中設置VI為可重入,在可重入VI中,每個調用都產生一
18、個副本,有著獨自的狀態信息,這樣在執行時,多個相同的子VI可以同時執行。 可重入執行在以下情況下是很有用的: VI需要等待一個特定的時間或者超時后才執行; VI中含有不能與其他實例共享的數據。37Http:/3.3LabVIEW多線程程序設計n 可重入技術可重入技術示例:設計一個仿真芯片74LS14 74LS14的功能圖 施密特非門的傳輸特性38Http:/3.3LabVIEW多線程程序設計n 可重入技術可重入技術 芯片74LS14是由6個施密特非門構成,因此74LS14.vi同時需要調用6個shimit.vi子VI。39shimit.vi的程序框圖。Http:/3.3LabVIEW多線程程序
19、設計n 可重入技術可重入技術4074LS14.vi的程序框圖。Http:/3.4LabVIEW線程通信與同步n 局部變量局部變量 局部變量(Local Variable)是LabVIEW為改善圖形化編程靈活性而專門設計的特殊節點,主要是解決數據和對象在同一VI程序中的復用問題。 局部變量實際上是程序框圖中已經存在的某個對象的復制品。 需要某個對象既可讀(讀出當前值)又可寫(寫入更新值)時,就可以使用局部變量。41Http:/3.4LabVIEW線程通信與同步n 創建局部變量創建局部變量:兩種方式 第一種方式是在按照“函數編程結構局部變量”路徑創建,此時局部變量的圖標有一個問號,需要選擇與之相關
20、聯的對象后方可使用; 第二種方式是選擇目標對象的右鍵快捷菜單中的“創建局部變量”菜單項,放置到背面板的相應位置,這樣就直接創建了該對象的局部變量。42Http:/3.4LabVIEW線程通信與同步n 局部變量有兩種狀態局部變量有兩種狀態:讀狀態和寫狀態 讀狀態相當于控制對象,外觀和控制對象的端子相似,為寬邊框; 寫狀態相當于顯示對象,外觀和顯示對象相似,為細邊框。n 局部變量最常用于兩種情況局部變量最常用于兩種情況:并行循環控制和對變量數值的更新 并行循環控制主要用于用一個變量同時控制幾個并行While循環的情況; 變量數值的更新是指在程序運行時,同一個對象既可作為輸入給程序賦值,也可作為輸出
21、顯示當前狀態。43Http:/3.4LabVIEW線程通信與同步n 全局變量全局變量 如果要在幾個VI間共享數據,局部變量無法解決,需要使用全局變量(Global Variable)來實現; 全局變量的創建方法為:按照“函數編程結構全局變量”路徑創建,在程序框圖中會生成一個“?”端子,這表示該變量尚未定義,該端子上有一個地球圖標,雙擊未定義的全局變量端子,或用右鍵快捷菜單中的“打開前面板”命令可打開一個全局變量前面板,它用于定義全局變量的內容。44Http:/3.4LabVIEW線程通信與同步n 全局變量應用示例:全局變量應用示例:測速系統全局變量前面板看上去和普通VI的前面板相似,但沒有背面
22、板。工具欄中也沒有運行和調試的相關工具圖標。45全局變量前面板。Http:/3.4LabVIEW線程通信與同步 測距儀器初始化程序測距儀器初始化程序46Http:/3.4LabVIEW線程通信與同步 測距儀器測試程序測距儀器測試程序47Http:/3.4LabVIEW線程通信與同步n 事件發生事件發生 事件發生(Occurrence)技術可以用來在VI或部分框圖程序之間傳遞觸發時間,利用事件發生技術可以避免輪詢帶來的系統資源浪費; 對于一般的應用來說,用戶應從調用“產生事件發生”函數開始來創建事件發生參數值,該參數值必須要傳遞到所有其他事件操作中。然后,用戶既可以通過調用“等待事件發生”函數來
23、發生,也可以通過設置事件功能來創建一個事件的發生。在LabVIEW環境中,可以有多重的“等待事件發生”函數節點存在,然后當與之聯系的設置事件功能被調用時,所有的事件都會在同一時間觸發。48Http:/3.4LabVIEW線程通信與同步n 事件發生示例事件發生示例 事件發生測試程序前面板事件發生測試程序前面板49Http:/3.4LabVIEW線程通信與同步 事件發生的測試程序框圖事件發生的測試程序框圖50Http:/3.4LabVIEW線程通信與同步 事件發生用戶子事件發生用戶子VIVI的程序框圖的程序框圖51Http:/3.4LabVIEW線程通信與同步n 通知通知 通知(Notificat
24、ion)技術通常用于兩個相互獨立的框圖程序之間或同一臺計算機中兩個不同VI之間的同步通信; 通知器(Notifier)是基于通知技術的通信工具,可以看做數據之間的郵箱,一部分框圖程序向郵箱中發送數據,另一部分框圖程序從這個郵箱中收取數據; 對于通知器,在沒有通知消息發生時,程序框圖處于等待狀態,避免了無休止地循環檢測,從而減少了計算機時間的浪費; 通知技術不能用于網絡或VI Servers之間的通信。52Http:/3.4LabVIEW線程通信與同步n 通知流程通知流程 從調用“獲取通知器引用”(Obtain Notifier)函數來開始創建通知參數值,使用該函數時必須輸入元素的數據類型; 通
25、過“發送通知”(Send Notifier)發送信息; 接收方通過“等待通知”(Wait on Notifier)得到發送的信息。53Http:/3.4LabVIEW線程通信與同步n 通知器示例通知器示例 NotificationNotification測試程序前面板測試程序前面板54Http:/3.4LabVIEW線程通信與同步 通知測試程序框圖通知測試程序框圖55Http:/3.4LabVIEW線程通信與同步 通知用戶子通知用戶子VIVI的程序框圖的程序框圖56Http:/3.4LabVIEW線程通信與同步n 通知的優缺點通知的優缺點 通知和事件發生有些類似,不需要使用輪詢技術,減少了系統
26、開銷; 通知相比事件發生機制有一定的優勢:事件發生不能傳遞數據,只能觸發事件,而通知不僅可以傳遞數據,還可以通過“取消通知”函數刪除信息; 通知也有一些不足:沒有數據隊列,有時會丟失一些事件,因為新的事件會覆蓋舊的沒有響應的事件。57Http:/3.4LabVIEW線程通信與同步n 隊列隊列 隊列(Queue)結構是一種先進先出(FIFO)的結構; 用隊列技術,可以將一個有序的消息(或數據)從一個程序中傳遞到另一個與之相獨立的并行運行的程序中; 隊列技術把數據發送到一個隊列緩存中,如果沒有程序將這些數據讀出,這些數據將一直保存在隊列緩存中,直到有一個程序將其讀出并刪除; 如果有兩個應用程序都在
27、等待同一個隊列中的同一條數據,只有那個動作快的程序會收到數據,動作慢的則不會收到預期的數據,因為這條數據已經被動作快的程序讀出并刪除了。58Http:/3.4LabVIEW線程通信與同步n 隊列的應用示例隊列的應用示例 QueueQueue測試程序前面板測試程序前面板59Http:/3.4LabVIEW線程通信與同步 隊列測試程序框圖隊列測試程序框圖60Http:/3.4LabVIEW線程通信與同步 隊列用戶子隊列用戶子VIVI的程序框圖的程序框圖61Http:/3.4LabVIEW線程通信與同步n 信號量信號量 信號量(Semaphore)技術可以用于限制同時訪問一個被保護的共享資源的任務數
28、目; 通過一個公用的信號量,可以在某一時刻僅允許一個任務執行一個受保護的臨界區代碼; 信號量和其他同步機制是不同的,其他機制主要是喚醒一個等待任務,信號量則是告訴任務需要等待其他任務允許其執行時才執行,所以能夠有效地保護公有資源。62Http:/3.4LabVIEW線程通信與同步n 信號量的應用示例信號量的應用示例 信號量測試程序前面板信號量測試程序前面板63Http:/3.4LabVIEW線程通信與同步 信號量測試程序框圖信號量測試程序框圖64Http:/3.4LabVIEW線程通信與同步 信號量用戶子信號量用戶子VIVI的程序框圖的程序框圖65Http:/3.4LabVIEW線程通信與同步n 集合點
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學考事業編題庫及答案
- 廚房物品處置方案(3篇)
- 廣告全案裝修方案(3篇)
- 跨境交易內容運營方案(3篇)
- 廠區管線改造方案(3篇)
- 汽修電氣改裝方案(3篇)
- 沈陽工業大學工程學院《外交知識》2023-2024學年第二學期期末試卷
- DB13T 5585-2022 有機廢棄物高溫快腐發酵技術規程
- 南陽職業學院《運籌學A(一)》2023-2024學年第二學期期末試卷
- 遼寧省交通高等專科學校《文化藝術管理研究》2023-2024學年第二學期期末試卷
- 公司事故隱患內部報告獎勵機制
- 上海市市轄區(2024年-2025年小學四年級語文)統編版期末考試((上下)學期)試卷及答案
- 小超市食品安全管理制度
- β內酰胺類抗菌藥物皮膚試驗指導原則2024課件
- 全過程工程咨詢管理服務方案投標方案(技術方案)
- 皮膚科進修后匯報
- 表觀遺傳學智慧樹知到期末考試答案章節答案2024年東北師范大學
- 蘭州大學強基計劃試題
- 供應商定期評價表(精簡版)
- 四川省涼山彝族自治州西昌市2024年小升初總復習數學測試題含解析
- TD/T 1014-2007 第二次土地調查技術規程(正式版)
評論
0/150
提交評論