陸俊杰1,周志剛,李曉峰
(1.江南大學(xué) 物聯(lián)網(wǎng)工程學(xué)院,江蘇 無(wú)錫 214000; 2.中國(guó)船舶科學(xué)研究中心,江蘇 無(wú)錫 21400)
以試驗(yàn)平臺(tái)為載體搭載各種試驗(yàn)系統(tǒng)與設(shè)備,對(duì)試驗(yàn)平臺(tái)的關(guān)鍵共性技術(shù)與專有技術(shù)進(jìn)行集中的試驗(yàn)驗(yàn)證,對(duì)其經(jīng)濟(jì)性、可行性、適用性、安全性、可靠性等方面進(jìn)行檢驗(yàn)及評(píng)估,為特定產(chǎn)品的設(shè)計(jì)、建造和運(yùn)行維護(hù)提供堅(jiān)實(shí)的技術(shù)基礎(chǔ)及指導(dǎo)依據(jù),形成技術(shù)研究與工程示范相結(jié)合的重大成果。
浮式保障平臺(tái)的驗(yàn)證項(xiàng)目涉及到眾多內(nèi)容和技術(shù)門類,根據(jù)研究?jī)?nèi)容,可將平臺(tái)試驗(yàn)驗(yàn)證子系統(tǒng)劃分為如下內(nèi)容:腐蝕監(jiān)檢測(cè)系統(tǒng)、浮式防波堤測(cè)量系統(tǒng)、波浪能發(fā)電性能測(cè)試系統(tǒng)、結(jié)構(gòu)安全監(jiān)測(cè)系統(tǒng)、環(huán)境監(jiān)測(cè)系統(tǒng)和系統(tǒng)總體概覽。根據(jù)各個(gè)子系統(tǒng)的驗(yàn)證要求需要采集的數(shù)據(jù)參數(shù)種類及數(shù)目繁多,并且數(shù)據(jù)無(wú)法實(shí)現(xiàn)互聯(lián)互通,由此數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)目標(biāo)就是要實(shí)現(xiàn)數(shù)據(jù)參數(shù)的集中顯示和管理功能。
現(xiàn)如今有許多種不同的數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)但在各方各面都存在著缺點(diǎn)。在基于多線程的航空發(fā)動(dòng)機(jī)數(shù)據(jù)采集系統(tǒng)中,采用多線程的方式結(jié)合MFC進(jìn)行系統(tǒng)設(shè)計(jì),其缺點(diǎn)是:1)與Actor模型自身高并發(fā)的特性相比較,會(huì)產(chǎn)生大量的代碼花銷占用內(nèi)存[1];2)相較于采用WPF,MFC這款編程框架無(wú)論在運(yùn)行速度、開發(fā)成本等性能上都不能比擬。在基于虛擬儀器的風(fēng)洞數(shù)據(jù)采集系統(tǒng)中,其缺點(diǎn)是系統(tǒng)耦合度高導(dǎo)致容錯(cuò)率低不易維護(hù)[2]。另外,在相同條件下使用基于C#的委托和事件的觀察者模式,與Actor模型相比較同樣存在系統(tǒng)耦合度高、不易升級(jí)維護(hù)的缺陷。從上述各種采集系統(tǒng)的設(shè)計(jì)發(fā)現(xiàn)大多數(shù)系統(tǒng)不能有效地解決內(nèi)存花銷大以及降低解耦度的問題,而利用Actor模型可以解耦系統(tǒng),增加復(fù)用性,避免堵塞,尤其是像這種分布式系統(tǒng)可以提高并發(fā)性能[3],易于升級(jí)和維護(hù)。
本文將介紹基于Actor模型的浮式保障平臺(tái)數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),對(duì)系統(tǒng)中各個(gè)功能點(diǎn)的測(cè)試驗(yàn)證設(shè)計(jì)方案的可行性并且達(dá)到預(yù)期的設(shè)計(jì)目標(biāo)。浮式保障平臺(tái)數(shù)據(jù)采集系統(tǒng)將采用Akka.Net框架來(lái)設(shè)計(jì)派生自基類Actor的各類子系統(tǒng)模塊。在各子系統(tǒng)模塊內(nèi)自定義Actor類的消息類型用以傳遞各類子系統(tǒng)的參數(shù)數(shù)據(jù),通過Actor類與控件類的關(guān)聯(lián)實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)顯示以及不同控件類的交互。
Actor模型最早是由Carl Hewitt于1973提出[4]來(lái)的一個(gè)關(guān)于并發(fā)和分配問題的開創(chuàng)性概念。通過引用單個(gè)原語(yǔ)稱之為Actor,并用于并發(fā)和分布式實(shí)體,這種方法提供的高級(jí)抽象結(jié)合其靈活性和效率使其對(duì)當(dāng)今的彈性多核系統(tǒng)以及在Internet規(guī)模上分發(fā)的任務(wù)具有極大的吸引力[5]。
Actor模型采用萬(wàn)物皆可建模為Actor的理念[6],所有邏輯或者模塊均可被看作Actor,它們彼此之間可以直接發(fā)送消息,不需要通過什么中介,并且是異步發(fā)送和處理的。因而通過不同Actor之間的消息傳遞實(shí)現(xiàn)模塊之間的通信和交互。Actor模型具有許多特性,例如它的狀態(tài)是本地的,無(wú)法通過外部訪問;所有的Actor必須有響應(yīng)消息傳遞來(lái)通信;異步非阻塞的事件驅(qū)動(dòng)編程模型等等。最值得稱贊的是Actor模型在實(shí)現(xiàn)過程中將十分輕量,可以快速的批量創(chuàng)建和銷毀,“幾十萬(wàn)甚至上百萬(wàn)進(jìn)程同時(shí)并行運(yùn)行十分常見, 而且經(jīng)常僅僅占用很少的內(nèi)存”[6]。正是由于Actor具有如此多的特性和優(yōu)點(diǎn),因而能夠克服傳統(tǒng)面向?qū)ο缶幊坛绦虻木窒扌?,高度滿足并發(fā)和分布式系統(tǒng)的挑戰(zhàn)。
浮式保障平臺(tái)數(shù)據(jù)采集系統(tǒng)的軟件部分在數(shù)據(jù)流的本質(zhì)上是符合Actor模型的[7],這類系統(tǒng)都是通過相關(guān)配置信息的計(jì)算與處理來(lái)實(shí)現(xiàn)所需物理量的監(jiān)測(cè)和采集,從而根據(jù)各類控件實(shí)現(xiàn)數(shù)據(jù)的顯示以及后續(xù)利用配置信息與采集數(shù)據(jù)的運(yùn)算和分析存儲(chǔ)。因此整個(gè)系統(tǒng)可以視作是一個(gè)流處理的系統(tǒng)[8],在每一步的環(huán)節(jié)都可以建立Actor模型來(lái)處理和傳遞數(shù)據(jù),提高各類專業(yè)化的數(shù)據(jù)采集子系統(tǒng)的解耦性,并且易于升級(jí)改造和維護(hù)。整個(gè)流處理系統(tǒng)被Actor強(qiáng)制組織成一個(gè)樹狀的層次結(jié)構(gòu),根據(jù)模型的監(jiān)督特性和傳遞消息的特殊性而減少出錯(cuò)以及避免線程的鎖定和堵塞,從而保障整個(gè)系統(tǒng)的安全可靠并且降低升級(jí)維護(hù)的難度。
這里要詳細(xì)描述一下浮式保障平臺(tái)數(shù)據(jù)采集系統(tǒng)的業(yè)務(wù)架構(gòu),從而可以利用Actor模型去搭建完整的Actor系統(tǒng)。系統(tǒng)完整的業(yè)務(wù)架構(gòu)如圖1所示。
圖1 系統(tǒng)業(yè)務(wù)架構(gòu)
正如上文引言介紹,浮式保障平臺(tái)有6個(gè)子系統(tǒng)功能,接下來(lái)將一一介紹業(yè)務(wù)架構(gòu)中各子系統(tǒng)的功能。
1)系統(tǒng)總體作為子系統(tǒng)其主要功能是顯示各功能子系統(tǒng)下主要的數(shù)據(jù),達(dá)到概覽系統(tǒng)總體的功能。
2)環(huán)境監(jiān)測(cè)系統(tǒng)最主要的功能是采取波浪騎士以及常用環(huán)境傳感器來(lái)收集平臺(tái)周圍的溫濕度以及有關(guān)波浪的參數(shù)。
3)結(jié)構(gòu)安全監(jiān)測(cè)系統(tǒng)的功能是驗(yàn)證監(jiān)測(cè)系統(tǒng)性能,收集近島礁的實(shí)測(cè)參數(shù)為后續(xù)的驗(yàn)證研究提供支撐。
4)腐蝕建監(jiān)測(cè)系統(tǒng)用于配合海上試驗(yàn)平臺(tái)進(jìn)行腐蝕防護(hù)的試驗(yàn)驗(yàn)證,檢驗(yàn)腐蝕防護(hù)設(shè)計(jì)的合理性,為保障平臺(tái)的安全運(yùn)行提供可靠的腐蝕監(jiān)測(cè)數(shù)據(jù)。
5)防波提測(cè)量系統(tǒng)用于配合試驗(yàn)平臺(tái)進(jìn)行防波堤的海上試驗(yàn)驗(yàn)證,進(jìn)一步檢驗(yàn)所設(shè)計(jì)的防波堤構(gòu)型和消浪機(jī)理的合理性,掌握浮式防波堤運(yùn)動(dòng)響應(yīng)與消浪特點(diǎn),為保障演示驗(yàn)證平臺(tái)的安全運(yùn)行提供可靠的環(huán)境測(cè)量數(shù)據(jù)。
6)波浪能發(fā)電性能測(cè)試系統(tǒng)主要用于實(shí)時(shí)監(jiān)測(cè)浮式防波堤波浪能發(fā)電裝置內(nèi)外部運(yùn)行環(huán)境參數(shù),采集發(fā)電裝置電功率參數(shù),為保障波浪能裝置及其配套設(shè)備的安全運(yùn)行提供可靠的環(huán)境測(cè)量數(shù)據(jù)。
通過以上6個(gè)子系統(tǒng)的詳細(xì)介紹可以發(fā)現(xiàn)每一個(gè)子系統(tǒng)都需要將大量的參數(shù)數(shù)據(jù)進(jìn)行監(jiān)控顯示,為了方便集中化地監(jiān)控查看從而需要設(shè)計(jì)一套數(shù)據(jù)采集系統(tǒng)可以全面詳細(xì)的顯示、存儲(chǔ)參數(shù)數(shù)據(jù),在結(jié)合以往的工程應(yīng)用的基礎(chǔ)上,采用基于Actor模型的數(shù)據(jù)采集系統(tǒng)以達(dá)到所需設(shè)計(jì)要求。
本文采用Akka.Net開源庫(kù)來(lái)編寫實(shí)現(xiàn)浮式保障平臺(tái)數(shù)據(jù)采集系統(tǒng)中的Actor模型。Actor是封裝狀態(tài)和行為的對(duì)象,它的基本元素是演員(Actor)和消息(message)[9],它們只是通過交換放入收件人郵箱的消息進(jìn)行通信[10],并且具有嚴(yán)格的等級(jí)制度,從而達(dá)到其監(jiān)督特性。因此在創(chuàng)建之前需要初始化一個(gè)Actor系統(tǒng),用來(lái)層層創(chuàng)建和管理各子Actor。
創(chuàng)建Actor模型最核心的是使用開源庫(kù)中的Actor類,它維護(hù)著單個(gè)Actor的狀態(tài),其中主要功能為自定義創(chuàng)建子Actor的數(shù)量、根據(jù)消息類型做出不同的響應(yīng)、選擇相同Actor系統(tǒng)下其他Actor的傳遞對(duì)象。因而我們采用Prop(配置類,封裝自定義類型Actor實(shí)例所需的所有信息)配方創(chuàng)建Actor。
對(duì)于每一個(gè)Actor都有其獨(dú)有的命名,但是它們的類型只有兩種即UntypedActor和ReceiveActor。這兩種類型的差異就是對(duì)消息處理方式的不同。換種說法,Actor在Akka.Net開源庫(kù)中主要依賴于類似模式匹配的概念(能夠根據(jù)其.Net類型和/或值有選擇性的處理消息),在設(shè)計(jì)上UntypedActor和ReceiveActor類型能夠分別處理簡(jiǎn)單和更為復(fù)雜的消息匹配。UntypedActor類通過onReceive方法實(shí)現(xiàn)消息的接收,其中消息作為參數(shù),這是一種較為簡(jiǎn)單的方法;而ReceiveActor類內(nèi)部可以為每一種要處理的消息類型提供調(diào)用,優(yōu)點(diǎn)在于處理較為復(fù)雜的消息處理并且具有與其他類交互的性能。這兩種類的不同決定著在實(shí)際應(yīng)用中采取哪一種類來(lái)進(jìn)行Actor的創(chuàng)建。
在創(chuàng)建的每一個(gè)Actor類中我們可以繼而創(chuàng)建新的Actor,兩者之間形成父子關(guān)系,這么做的目的就回歸到為什么一個(gè)Actor系統(tǒng)是層級(jí)結(jié)構(gòu)的?原因有兩個(gè),其一是將任務(wù)層層分解分配直至最低級(jí)以便一體化處理,也就是通過最小的代碼占用最容易的處理。另一個(gè)原因是監(jiān)督特性,層級(jí)結(jié)構(gòu)可以將整個(gè)Actor系統(tǒng)的風(fēng)險(xiǎn)降到最低,當(dāng)某一層級(jí)的某一個(gè)Actor出現(xiàn)問題,其父Actor會(huì)接收到消息并關(guān)閉這一分支,從而不影響其他的運(yùn)行,提高整個(gè)系統(tǒng)的安全性。
在Actor模型中使用Tell()方法來(lái)發(fā)送消息,括號(hào)內(nèi)自定義消息類型和內(nèi)容從而達(dá)到萬(wàn)物皆可傳遞的特性。與此同時(shí),如何能夠?qū)崿F(xiàn)一對(duì)一或者一對(duì)多傳遞等情況十分重要。因而需要Akka.Net中的ActorSelection類的幫助,通過查找路徑的方式可以最直接地與同一系統(tǒng)下任何層級(jí)的任何Actor進(jìn)行通信,并且ActorSelection類只是獲取句柄的方式來(lái)完成查找降級(jí)代碼的占用。
圖2描述了一個(gè)名叫ActorSystem的簡(jiǎn)易Actor系統(tǒng),
里面有最頂級(jí)即最上層的Actor,它的名字叫A,Actor的類名為ParentActor,并且創(chuàng)建了子Actor取名為B,Actor的類名為ChildActor。在這里要介紹一下Actor的重要組成-郵箱。Actor之間的通信并不是直接發(fā)送給Actor,而是發(fā)送給該Actor內(nèi)的郵箱,也可以描述為消息隊(duì)列,按照先后順序在Actor有時(shí)間的情況下一一傳遞給它來(lái)處理。如果要實(shí)現(xiàn)向B傳遞消息則需要查找傳遞路徑,根據(jù)圖中的關(guān)系可以得到“akka://ActorSystem/user/A/B”這一路徑就是我們需要的,可以通過路徑直接與B通信,以這種方式去通信是最快捷有效的方式,只要在同一個(gè)Actor系統(tǒng)下無(wú)論是在哪個(gè)分支都可以通信。
圖2 簡(jiǎn)易Actor系統(tǒng)的創(chuàng)建和消息傳遞
本章將根據(jù)上述的系統(tǒng)架構(gòu)來(lái)搭建應(yīng)用于浮式保障平臺(tái)的數(shù)據(jù)采集系統(tǒng)。具體的系統(tǒng)架構(gòu)如圖3所示。
圖3 Actor系統(tǒng)的結(jié)構(gòu)
和上文所述的系統(tǒng)架構(gòu)有所不同的是,在實(shí)際創(chuàng)建過程中數(shù)據(jù)采集Actor與總體界面Actor為兄弟關(guān)系,都是根Actor,但這不影響整個(gè)系統(tǒng),反而可以使層次架構(gòu)更為清晰,一個(gè)專門負(fù)責(zé)處理最原始的數(shù)據(jù),另一個(gè)專門用來(lái)作為中轉(zhuǎn)和分發(fā)站,向所有子系統(tǒng)Actor傳遞數(shù)據(jù)。
在數(shù)據(jù)采集Actor中有processDataActor類和displayDataActor類兩個(gè)父子Actor類,先后分別用來(lái)處理不同來(lái)源的原始數(shù)據(jù)和將相同子系統(tǒng)的參數(shù)數(shù)據(jù)歸類放入一個(gè)存放數(shù)據(jù)容器內(nèi),最終將完整的數(shù)據(jù)參數(shù)集通過Actor路徑傳遞給總體頁(yè)面Actor。
_subscriptions = new HashSet
IActorRef actor1= Context.ActorOf(Props.Create(() => new WindWavePageActor()), "windWavePageActor");
IActorRef actor2 =Context.ActorOf(Props.Create(() => new HomePageActor()), "homePageActor");
IActorRef actor3 = Context.ActorOf(Props.Create(() => new StructurePageActor()), "structurePageActor");
IActorRef actor4 = Context.ActorOf(Props.Create(() => new GroynePageActor()), "groynePageActor");
IActorRef actor5 = Context.ActorOf(Props.Create(() => new ErosionPageActor()), "erosionPageActor");
IActorRef actor6 = Context.ActorOf(Props.Create(() => new WavePowerPageActor()), "wavePowerPageActor");
_subscriptions.Add(actor1);
_subscriptions.Add(actor2);
_subscriptions.Add(actor3);
_subscriptions.Add(actor4);
_subscriptions.Add(actor5);
_subscriptions.Add(actor6);
pageActor類作為總體頁(yè)面Actor,最主要的任務(wù)就是作為消息中轉(zhuǎn)站,不斷地將接受到的消息遍歷傳遞給所有的子Actor。以下為創(chuàng)建子系統(tǒng)Actor的過程并且逐一放入HashSet
在每一個(gè)子系統(tǒng)Actor內(nèi),都將會(huì)根據(jù)收到的消息來(lái)創(chuàng)建控件Actor、傳遞參數(shù)數(shù)據(jù),因而舉例詳細(xì)介紹一下子系統(tǒng)homePageActor類及子Actor的消息傳遞過程,并且在命名系統(tǒng)主頁(yè)子系統(tǒng)Actor時(shí)名字和類名一樣,所以下文所有出現(xiàn)的homePageActor即是Actor的名字,否則會(huì)有特殊說明。homePageActor與系統(tǒng)主頁(yè)homePage類相互關(guān)聯(lián),在頁(yè)面初始化過程中創(chuàng)建的每一個(gè)控件都將會(huì)給homePageActor發(fā)送一個(gè)自定義的創(chuàng)建消息。其中內(nèi)容包含譬如控件名稱描述的字符串、控件自身的類以及次序數(shù)字等,針對(duì)這種包含種類多較為復(fù)雜的消息類型,在homePageActor類中只能自定義message消息類,將例如字符串、值以及其他類在消息類中進(jìn)行實(shí)例化。因而只需要將所需要傳遞的內(nèi)容一一放入自定義的消息類中,隨即將整個(gè)消息類的實(shí)例作為message傳遞給homePageActor,就能實(shí)現(xiàn)復(fù)雜的通信過程并且進(jìn)行控件Actor的創(chuàng)建。圖4就是創(chuàng)建控件Actor的過程。
圖4 創(chuàng)建控件Actor的過程
在創(chuàng)建完所有的控件Actor之后就將進(jìn)行另一功能的運(yùn)行。homePageActor會(huì)將接收到的來(lái)自父Actor也就是pageActor發(fā)送的消息進(jìn)行過濾,選取符合自身子系統(tǒng)的參數(shù)數(shù)據(jù)繼而進(jìn)行下一層級(jí)Actor的傳遞,從而起到一個(gè)中轉(zhuǎn)過濾的作用。在這里需要重點(diǎn)介紹的不是消息的傳遞,而是一種構(gòu)成方法,即將Actor類與控件類進(jìn)行交互也就是創(chuàng)建一種將控件類對(duì)象作為參數(shù)的Actor類,而這種構(gòu)成方法只能在 ReceiveActor類生效,采用ReceiveActor類而不是UntypedActor類的優(yōu)勢(shì)在于可以對(duì)有關(guān)數(shù)據(jù)調(diào)用控件類的方法處理并且直接在控件類的參數(shù)中賦值修改,減少了許多額外的代碼占用。一旦控件Actor接收到消息,根據(jù)消息類型判斷為顯示數(shù)據(jù)時(shí),就能將數(shù)據(jù)傳入控件類的事件進(jìn)行處理繼而存放入控件的動(dòng)態(tài)集合中進(jìn)行刷新顯示最終呈現(xiàn)出來(lái)。
圖5展示了表格控件通過Actor顯示數(shù)據(jù)的效果。其中第一列為參數(shù)名稱,第三列為單位,這兩列是固定不變的顯示,不會(huì)被刷新變化;而第二列是參數(shù)數(shù)值以及第四列為數(shù)值狀態(tài)描述,從控件Actor傳遞到控件內(nèi)的數(shù)據(jù)主要就是刷新這兩列的數(shù)值顯示。在這表格顯示的基礎(chǔ)上,增加了表格控件和曲線控件的交互,其功能為通過鼠標(biāo)點(diǎn)擊表格的單元格實(shí)現(xiàn)曲線控件顯示選中單元格內(nèi)參數(shù)數(shù)值隨時(shí)間變化的曲線圖。這和表格顯示數(shù)據(jù)的相似之處在于利用Actor傳遞消息的方法來(lái)取代C#語(yǔ)法中傳統(tǒng)的異步委托事件的方法。這兩者之間的比較不難看出,使用委托一旦綁定的事件越多,內(nèi)存占用就越多,對(duì)性能的影響越大,在這方面Actor模型的并行和分布式特點(diǎn)使得占用內(nèi)存會(huì)少很多,因而在面對(duì)高吞吐和低延遲的系統(tǒng)要求下,Actor模型要更加的出色。
圖5 表格控件效果圖
表格和曲線控件的交互流程如圖6所示。在創(chuàng)建控件Actor時(shí),曲線Actor將自己的名字通過字符串的消息類型發(fā)送給表格Actor,然后在表格控件內(nèi)保存有曲線Actor的路徑參數(shù)。當(dāng)在表格的鼠標(biāo)點(diǎn)擊響應(yīng)事件激活時(shí),將參數(shù)集合作為消息發(fā)送給曲線Actor,同樣的原理下,曲線控件接收到數(shù)據(jù)利用一系列的處理實(shí)現(xiàn)顯示。
圖6 表格與曲線的交互
本文所設(shè)計(jì)的系統(tǒng)最終部署在浮動(dòng)平臺(tái)上,根據(jù)對(duì)各系統(tǒng)所上傳數(shù)據(jù)的頻率,實(shí)現(xiàn)大部分?jǐn)?shù)據(jù)的刷新速率為1秒,少部分達(dá)到50毫秒。經(jīng)過測(cè)試,軟件能夠正常接收并顯示各子系統(tǒng)的實(shí)時(shí)數(shù)據(jù),不存在數(shù)據(jù)丟失的情況,曲線的繪制效果良好,表格與曲線的交互并無(wú)延遲,即點(diǎn)即繪制,與此同時(shí)軟件的內(nèi)存占用從原有的1 G多降低至600~700 MB。軟件運(yùn)行效果如圖7所示。
圖7 數(shù)據(jù)采集系統(tǒng)的顯示效果
本文介紹了浮式保障平臺(tái)項(xiàng)目的內(nèi)容以及對(duì)比各種數(shù)據(jù)采集系統(tǒng)的優(yōu)劣特性,結(jié)合Actor模型以及相關(guān)技術(shù),設(shè)計(jì)并實(shí)現(xiàn)了基于Actor模型的浮式保障平臺(tái)數(shù)據(jù)采集系統(tǒng),具體的工作內(nèi)容如下:
1)詳細(xì)介紹Actor模型以及Akka.NET開發(fā)庫(kù)中的Actor類。
2)詳細(xì)介紹浮式保障平臺(tái)數(shù)據(jù)采集系統(tǒng)的業(yè)務(wù)架構(gòu)。
3)詳細(xì)介紹整體系統(tǒng)的實(shí)現(xiàn)過程并展示實(shí)現(xiàn)效果。
在系統(tǒng)的實(shí)際運(yùn)行中可以發(fā)現(xiàn)采用Actor模型能夠模塊化地建立一條數(shù)據(jù)采集和傳輸?shù)耐?,最明顯的優(yōu)勢(shì)在于提高容錯(cuò)率,易于維護(hù),層級(jí)化的Actor模塊之間不會(huì)因?yàn)橐粭l通信線路的問題導(dǎo)致全部失效。在開發(fā)過程中使用Actor模型較以往減少了代碼占用,并且可以更加便捷地修改和升級(jí),提高開發(fā)效率。在利用Actor模型作為載體傳遞不間斷的數(shù)據(jù)時(shí)可以發(fā)現(xiàn)在高并發(fā)和分布式的系統(tǒng)中,Actor模型之間的傳遞速度十分優(yōu)異并且多線程、異步發(fā)送消息的特性使得系統(tǒng)真正意義上的成為分布式的系統(tǒng)。通過Actor模型的傳遞,數(shù)據(jù)參數(shù)最終將在表格控件中顯示,可以清晰的看到控件內(nèi)數(shù)據(jù)值以初始設(shè)定的采樣速率不斷地刷新,達(dá)到預(yù)計(jì)的采集和顯示效果。在整個(gè)過程中,浮式保障平臺(tái)數(shù)據(jù)采集系統(tǒng)穩(wěn)定高效地完成數(shù)據(jù)的采集和顯示功能,并且相較于傳統(tǒng)的委托傳值的方法降低了計(jì)算機(jī)內(nèi)存的消耗,證明了基于Actor模型的數(shù)據(jù)采集系統(tǒng)的可行性。
Actor模型現(xiàn)在已經(jīng)廣泛成為高并發(fā)事物的首要解決方案,與此同時(shí)并發(fā)分布式的數(shù)據(jù)采集系統(tǒng)以往的設(shè)計(jì)思路并不能很好地解決性能上的缺陷,因而Actor模型與數(shù)據(jù)采集系統(tǒng)的結(jié)合是必然。在此次設(shè)計(jì)與實(shí)現(xiàn)中發(fā)現(xiàn)系統(tǒng)仍有改進(jìn)優(yōu)化的方面,因而未來(lái)基于Actor模型的數(shù)據(jù)采集系統(tǒng)的工作可以包括以下幾個(gè)方面:
1)由于Actor模型的消息通信的機(jī)制,在萬(wàn)物皆是Actor的理念下,有更多類與類之間的交互可以通過Actor模型來(lái)實(shí)現(xiàn);Actor具有延時(shí)發(fā)送的功能,在數(shù)據(jù)傳輸?shù)拈_發(fā)中可以根據(jù)特定的情況利用這一功能實(shí)現(xiàn)連續(xù)間隔的發(fā)送接收。
2)目前基于Actor模型的數(shù)據(jù)采集系統(tǒng)使用的只是本地的數(shù)據(jù)傳輸,由于Actor模型具有遠(yuǎn)程傳輸?shù)墓δ苣K,可以將這方面的功能結(jié)合現(xiàn)有技術(shù)開發(fā)來(lái)優(yōu)化數(shù)據(jù)的采集傳輸,在數(shù)據(jù)采集系統(tǒng)上會(huì)有廣闊的前景。
3)Actor模型隨著發(fā)展已經(jīng)具有多種語(yǔ)言的支持,因而在追求高速、低耗和強(qiáng)穩(wěn)定的性能指標(biāo)下,將測(cè)試基于c++、Erlang等不同種語(yǔ)言下的Actor的性能,尋求最適用的一種。