[LabVIEW架構]ActorFramework(一)


前言

小黑結婚回來第二周了,每天忙於程序設計,時間比較緊張,所以文章一直沒出來,也算憋大招了。
近期小黑將與大家一起認識一下ActorFramework,既是對自己一段時間寫AF程序的總結,也是梳理,希望能勾起大家對AF的興趣。

在第一個文檔中,我們先來理解一下AF的概念,以及它的來龍去脈。

正文

如果你已經使用LabVIEW編程2年以上,你將不可避免的會接觸到生產者消費者,不可以避免的會設計屬於自己QMH系統,甚至為解決多線程中的數據通信大費周折。

在程序只有個位數線程的時候,你會欣喜於自己可以控制多個線程進行不同的行為,但是當程序繼續擴大,你不得不面臨如下的問題:
1. 子線程中的錯誤越來越難以調試
2. 子線程中出現的BUG越來越難以復現
3. 子線程中的耗時代碼很難定位

對於多線程中的隊列和通訊關系,我們不得不承認對於線程的管理是一個艱難和痛苦的過程。

對於並發程序的開發,計算機科學進行了很多的理論推導,其中Actor Model作為一種並發的理論基礎,不斷發展,成為了解決並發問題的有效途徑。

Actor Model的起源

Actor Model起源於1973年 Carl Hewitt的論文,該模型靈感據說來源於物理學的廣義相對論和量子力學並受到了Lisp,Simula的編程語言和Smalltalk早起版本的影響。

理論產生后 由高度並行計算機的前景驅動其 發展(在並行計算機 硬件層級,系統由數十個,數百個,甚至數千個獨立微處理器組成,每個處理器都有自己的本地存儲和通訊處理器,通過高性能的網絡進行通訊)

之后,Irene Greif  專門研究該模型,並為Acto Model 開發了一套操作術語作為其博士后的研究成果。

兩年后, 亨利·貝克和休伊特出版了一套針對Actor系統的公理定律。

這些研究成果直接推動了ActorFramework的全面發展, 它不僅僅是並發計算的一種理論體系,也是 多個實際並發系統應用的理論基礎。既 應用於硬件系統層級的並發設計,而且也推動了軟件並行開發的發展。

如果你希望獲得Actor Model的准確定義,可以查看WIKI獲取相關資料 
如果你希望理解Actor Model的更多解釋,可以參考文檔(本文為閱讀該文檔的翻譯和理解):
如果你希望學習LabVIEW ActorFramework,你可以參考文檔:

什么是Actor Model

Actor Model的理解從一個情境假設,並開始推演。

我們不妨將Actors認為是一個個人,規定這些人員不能互相進行語言溝通,他們僅僅通過郵件方式進行交流。

1. Message

假定兩個人,一個作為老師,一個作為學生。學生每天早上給老師發送一封郵件,而老師給其一個反饋

這里將有這樣一些溝通的要點:
1. 學生通過郵件溝通,並且一旦發送郵件,會話即開始,無法停止
2. 老師收到郵件后即進行對應的動作
3. 老師收到郵件后必然會反饋一封郵件
4. 學生可以在任何時候接收返回的郵件
5. 學生將不再存在一直阻塞等待的問題

通過這個例子,我們理解了Actor Model在解決消息發送中的流程

 2.並發

現在,我們不妨假設存在3對老師和學生,每一個學生發送郵件給任何一個老師,將會發生什么事情呢?

實際上什么都不會發生,每一個人都將會有屬於自己的郵箱,但是這里有一個要點需要注意:

默認情況下,郵件中的郵箱按照到達的順序去讀取。【事實上可以通過對消息定義優先級來確保高優先級的消息先接收】

在默認情況下,其內部是一系列並發的、相互關聯的隊列。沒有一個人會阻塞等待郵件接收,這個系統將是一個無阻塞的溝通。

 3. Failover-故障切換

我們繼續假定老師是教授不同的課程,分別是歷史、地理和物理。

歷史老師回復了一個歷史課的內容;
地理老師回復了一個有趣的地理知識;
哲學老師回復了一條格言。

每一個學生發送消息給老師時,都將獲得一個回饋。學生不關心是哪個老師發送了回饋信息。
假如有一天,一個老師生病休息無法發送反饋信息,將會有一個新的代課老師來代替回復信息。

 這里有幾個關鍵點需要注意:
1. 這個系統中,不同的Actor完成不同的操作
2. 如果Actor無法完成某一個操作,可以重新創建一個Actor來繼續任務,或者忽略該任務

4. 多任務處理

不同的老師除了反饋自己的一些知識,也可在詢問考試成績的時候給出分數郵件。在Actor Model系統中,這意味着Actor 可以執行多種不同的Message

5.改變



在這個文檔中,學生和老師將會變成我們的Actor,The Email Box 成為了Mail Box組件,請求和響應是一些靜態不可修改的類,系統將Message路由給不同的Actor。

LabVIEW中的映射

在LabVIEW中,我們將映射這部分的邏輯關系,了解Actor Model的原理。
(本程序設計以LabVIEW版本為2015為准)

Actor創建

在學習ActorFramework時,我們先知道其選板位置為

面向對象編程的主要對話框為項目,為此我們創建一個空白的項目


新建Actor,創建基礎的Actor模板

完成Student 的創建

Method創建

Student有屬於自己的行為,所以為這個Actor創建屬於自己的Method
 為Student創建Requested Quote
 
完善其方法,使其彈出Dialog!

 Message創建

創建Student中Request Quote和Teacher中Quote Response的Message
完成創建后的Message將會多出一個Request Quote MSG
 

 啟動Actor

新建空白的LuanchVI
使用LaunchVI啟動和Send Normal Stop進行停止

發送消息

通過Send Request Quote 發送消息
 

 運行程序

運行程序,我們實現了對Request消息的發送和異步執行
 未完待遇,更多精彩請看后續文章....

后記

本文介紹了Actor Model的基本概念, 並映射到LabVIEW中,寫出了一個簡單消息的發送Demo,后續將會對實際執行過程進行更加深入的分析,歡迎繼續關注~

 


 

 

 

 
















免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM