999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于“管家模型”的異步消息通知與任務調度機制

2017-12-25 05:23:51汪利虎張凡石
網絡安全技術與應用 2017年12期
關鍵詞:模型

◆汪利虎 張凡石 金 京

(1.中國人民解放軍31011部隊 北京 100091;2.中國電科集團28所 江蘇 210007)

基于“管家模型”的異步消息通知與任務調度機制

◆汪利虎1張凡石2金 京1

(1.中國人民解放軍31011部隊 北京 100091;2.中國電科集團28所 江蘇 210007)

本文提出了基于“管家模型”的異步消息通知與任務調度機制,主要用于在包含大量計算和業務相關性的應用系統中通過異步消息的方式簡化隨機任務調度與處理。通過在安卓操作系統上通過充分利用系統特性進行了輕量級的實現,驗證了此模型的可行性及給開發工作帶來的便捷性。

異步;多線程

0 引言

為了應對軟件用戶日益復雜的功能及體驗需求,應用系統的設計正面臨著越來越多的挑戰,多任務的管理尤為突出。在現代操作系統已經能夠非常好的支持多任務的背景下,如何充分利用其“多核”等特性,開發出符合客戶復雜需求但足夠穩定和健壯的應用,一直是軟件業界的熱門研究課題。

通常,實現多任務的方式有多進程與多線程兩種,表1列出了這兩種方式在數據共享、同步、資源占用、生命周期管理和開發調試等方面的對比情況。

表1 多進程與多線程實現方式對比情況

在包含大量計算和業務相關性的應用系統中進行隨機任務的調度與處理,意味著較多的任務執行模塊可能被毫無規律的、突發性的或頻繁的創建與銷毀,他們的生命周期可能很短暫,并且這些任務執行模塊需要和應用程序的主模塊通信以傳輸任務處理結果或告知其狀態。在此背景下,本文提出了基于“管家模型”的異步消息通知與任務調度機制。

1 管家模型

1.1 整體架構與原理

為簡化隨機任務的調度處理,并解決軟件系統開發中的線程管理和維護較易混亂的情況,本文借鑒生活中主人把事務交由管家代理并由各個下屬仆人去執行的模式,將其應用到多線程的管理中來,并以此建立了“管家模型”。模型的整體架構如圖1所示。

在大部分的應用系統與開發框架中(如Microsoft .NET框架和Android操作系統),對用戶操作的響應和處理是通過事件驅動的。UI線程通常作為應用的主線程自系統啟動后就一直運行并消費(Producer/Consumer模式)運行時的各種事件,如:鼠標點擊(OnClick)事件,觸屏(OnTouch)事件等。如果主線程(UI線程)執行過多的與UI渲染無關的操作和任務,可能導致UI無法響應用戶與其的交互(ANR,Application Not Responding),為解決這個問題,必須將一些耗時費力的操作交由子線程處理,并且鑒于方便管理和統籌規劃方面的考慮,在所有的子線程中設置兩種角色:調度線程一個(管家)及工作線程若干(仆人)。主線程不需向各個子線程交辦具體工作任務,而是通過調度線程下達命令,為使任務結果能夠更快回傳,各個子線程直接向主線程匯報任務處理情況,而他們的執行狀態、生命周期等主線程不關心的信息則匯報給調度線程并由其管理和維護。

圖1 “管家模型”的整體架構

1.2 模塊分析

(1)主線程

當一個應用程序啟動時,操作系統將會為其創建一個進程,同時一個線程也會立即運行在此進程中,該線程就是程序的主線程,主線程通常就是創建GUI的線程(UI線程)。因此,主線程是整個應用程序運行最主要的模塊,執行程序的主要邏輯,負責繪制UI呈現給用戶并且直接或間接處理所有與用戶的交互。

在事件驅動的系統中,主線程自創建并運行后,會自動擁有一個消息循環及與其綁定的消息隊列以存儲未能及時處理的事件,消息隊列中的事件將會被消息循環迅速、順序的分發和處理。而對不同類型的事件做出相應處理以減輕主線程負擔,加快其消息分發速度,避免其長時間無響應,這正是調度線程和工作線程存在的意義。

由于一些任務的行為是固化的,他們獨立于具體的使用場景,因此主線程可以直接通過一些預先定義的命令字向調度線程發送這些固定的任務,這些命令字可舉例如下:

①TASK_INIT:啟動和初始化調度管理模塊并將初始化后續的工作交由其進一步處理;

②TASK_STOP:結束調度管理模塊的生命周期,并將善后處理工作交由其進一步處理;

③TASK_RESTART:由于某些原因造成調度管理模塊工作異常,需要重新啟動并初始化。

其余具體的任務將會以任務包和與其綁定標識的形式發送給調度線程,當主線程收到工作線程直接發來的任務結果時,可以按照之前的任務標識識別他們,并且做出相應反應,如更新UI元素或顯示一個短暫提示等等。

(2)調度線程

調度線程在主線程與工作線程之間扮演著協調者或代理的角色:代理所有來自主線程的任務,維護所有的工作線程,協調他們之間的通信。主線程只需要向調度線程發送預先定義好的命令字或發起一個帶有字符串形式標識的任務包,此任務包將會被預處理和進一步封裝,然后根據當前維護的工作線程狀態,隨機選擇一個空閑線程接收和執行此任務包。

與主線程類似,調度線程也會在自己內部維護一個消息隊列(異步)以接收來自主線程及工作線程的各種消息,同時一個消息循環也會在線程啟動后被綁定以便從消息隊列中獲取和分發消息,通常可以在此消息循環內部定義一個接口用來方便外部與其交互,如發送消息和定義消息處理方法等。需要注意的是,線程的啟動可以根據實際情況選擇“懶加載”(Lazy Init)的啟動模式,即在應用程序第一次需要進行多任務處理時才啟動此調度線程及相關的工作線程,這樣處理的好處是可以避免計算資源的空置浪費,而計算資源一旦被啟用后便可以復用以提高利用效率。此外,在調度線程內部創建一個調度器,將不同的線程調度策略和機制統一管理、方便維護,甚至在應用程序運行期間,可根據上下文環境實時置換策略(Strategy Pattern)。

(3)工作線程

工作線程在整個架構模型中負責具體的任務執行。這些線程資源被放入一個線程組中供管家按需調度,每個工作線程的生命周期由調度線程管理,并且根據調度線程發送的固定命令字或任務包做出響應,其運行狀態的變化將及時通知上級(Status Update),即調度線程,如“忙->空閑”。如果工作線程被分配了具體任務,任務執行結束的結果直接上報給任務發送源,即主線程,以避免不必要的信息中轉。

通常,工作線程組中線程的數量是一個實踐經驗參數,在不同的生產環境和框架下會有不同的配置,并且這些配置項都可以根據工程實際需要修改。例如,在Web應用服務器Tomcat中,默認的最小活躍線程數量參數minSpareThreads為25;在Java IoC框架Spring中,默認的核心線程數量參數corePoolSize為1。

2 實現及分析

Android是一種基于Linux的開源操作系統,是當今全球市場份額最大的移動終端操作系統。移動應用程序在運行期間經常需要處理用戶發起的短小隨機的計算任務,如從網絡下載多個圖片,從本地數據庫讀取大量數據并解析等。可見,管家模型非常適用于此類應用程序與用戶的交互場景,事實上管家模型的思想也是受此啟發而產生。

2.1 核心元素及與模型的對應關系

(1)Message:消息,其中包含了消息ID,消息處理對象以及處理的數據等,由MessageQueue統一列隊,終由Handler處理。映射為管家模型中的異步消息Msg。

(2)Handler:處理者,負責Message的發送及處理。使用Handler時,需要實現handleMessage(Message msg)方法來對特定的Message進行處理,例如更新UI等。Handler會引用當前線程里的Looper和MessageQueue,同一線程可以有多個Handler,并且他們都共享同一Looper和MessageQueue。

(3)MessageQueue:消息隊列,每個線程只有一個,用來存放Handler發送過來的消息,并按照FIFO規則執行。當然,存放Message并非實際意義的保存,而是將Message以鏈表的方式串聯起來的,等待Looper的抽取。映射為管家模型中的消息隊列。

(4)Looper:消息泵,每個線程只有一個,不斷地從MessageQueue中抽取Message執行。因此,MessageQueue與Looper一一對應。映射為管家模型中的消息循環。

(5)Thread:線程,負責調度整個消息循環,即消息循環的執行場所。

(6)HandlerThread: Thread類的增強,內部封裝了消息循環供創建Handler以方便的進行消息發送和處理。映射為管家模型中的調度線程和工作線程。

(7)MasterHandler: 綁定到調度線程的 Handler,對來自主線程和工作線程的不同類型消息作出相應處理,包括進步封裝和轉發,更新內部維護數據的狀態,定期進行狀態報告等。

2.2 核心代碼及消息和任務調度機制

如圖2所示,將上述的管家模型映射為一種示例實現并作出了相應分析。(鑒于篇幅原因,此處只列出核心代碼片段,其余代碼已被刪除)

圖2 代碼清單1

圖3 代碼清單2

如圖 2所示,整個管家模型的核心功能被集中到MultiTaskManager類中,此類被實現為單例模式以保證全局唯一且一致的調用,并且在MultiTaskManager中保存了用以維護各工作線程狀態的 threadStateMap,參與整個模型中消息發送和處理handler的 handlerMap,以及來自主線程的各種類型任務的taskMap。

圖4 代碼清單3

圖5 代碼清單4

如圖3所示,startTask()方法展示了通過一個方法調用并傳遞異步消息、返回消息處理handler和具體任務(通過一個Runnable接口實現)的方式,在全局范圍內調用MultiTaskManager以完成多任務調度,任務發送方只需向外指派任務和處理任務結果,而不需要關心底層諸如線程創建和銷毀、計算資源的復用、數據同步等等一系列細節。

如圖4所示,展示了調度線程的消息處理機制中較為重要的幾個消息類型的處理方式:

(1)針對狀態報告STATE_BUSY,STATE_IDLE,更新內部維護的數據狀態并繼續其他操作;

(2)針對初始化指令 TASK_INIT,將指令進步傳遞給工作線程組以完成整個系統初始化過程;

(3)針對任務調度指令 TASK_SCHEDULE,根據自身狀態和可用資源情況執行調度操作。

如圖5所示,展示了任務如何調度的一種簡要操作方式,其關鍵步驟如下:

(1)獲取當前空閑的計算資源,即工作線程,若失敗,采用特定退避算法進行重新調度;

(2)封裝任務行為,工作線程在執行任務之前(不論任務是否為空)將總是首先更新自身狀態,并報告調度線程其狀態更新;

(3)若任務不為空,執行任務;

(4)封裝任務行為,工作線程在執行任務完畢后更新自身狀態并報告調度線程其狀態更新;

(5)直接向任務發送源(通常就是主線程)傳遞任務結果。

圖6 “管理模型”在Android系統下實現的具體運行過程

圖6通過一個從數據庫加載大量數據的實例工程展示了上述管家模型在 Android系統下實現的具體運行過程,包含了從 UI線程發起的多任務管理模塊的全局初始化、計算資源獲取、任務調度與執行和返回任務結果等過程。由代碼清單及圖2可見,多任務管理模塊的使用非常簡潔,流程清晰。

3 結語

在這種“管家模型”中,系統中的不同角色通過規范化的異步消息(可統一抽象為消息標識和消息內容)進行通信,彼此之間獨立運行,各自維護內部的邏輯和狀態,因此系統的整體穩定性大幅提高,不會因某個子模塊崩潰而導致整個系統崩潰,這種模型的設計更符合軟件工程多年實踐以形成的思想:“高內聚,松耦合”。

[1]阮曉星,楊亮,魏晉鵬.基于Intranet的事務處理系統[J].微計算機應用,1997.

[2]唐麗,趙強.基于CORBA實現分布式系統間的異步消息通信[J].計算機應用,2002.

[3]高鵬飛,李新明,孫建.Linux與VxWorks任務調度機制分析[J].工業控制計算機,2005.

[4]http://tomcat.apache.org/.

[5]http://spring.io/.

猜你喜歡
模型
一半模型
一種去中心化的域名服務本地化模型
適用于BDS-3 PPP的隨機模型
提煉模型 突破難點
函數模型及應用
p150Glued在帕金森病模型中的表達及分布
函數模型及應用
重要模型『一線三等角』
重尾非線性自回歸模型自加權M-估計的漸近分布
3D打印中的模型分割與打包
主站蜘蛛池模板: 久久天天躁夜夜躁狠狠| 欧美激情视频在线观看一区| 一级爱做片免费观看久久| 影音先锋亚洲无码| 麻豆精品在线视频| 国产伦精品一区二区三区视频优播| 国产午夜无码片在线观看网站| www.国产福利| 亚洲午夜福利精品无码不卡 | 国产欧美视频综合二区 | 深爱婷婷激情网| 日韩毛片视频| 亚洲黄色成人| 亚洲国产成人久久精品软件| 亚洲成人网在线播放| 2021亚洲精品不卡a| 亚洲成人黄色网址| 亚洲国产成人麻豆精品| 成人国产一区二区三区| vvvv98国产成人综合青青| 免费看的一级毛片| 国产成人精品第一区二区| 精品无码一区二区三区电影| 最新加勒比隔壁人妻| 久久青草热| www.91在线播放| 亚洲中久无码永久在线观看软件| 女同久久精品国产99国| 午夜a级毛片| 国产成人高清在线精品| 国产一区二区三区精品欧美日韩| 成人a免费α片在线视频网站| a天堂视频| 妇女自拍偷自拍亚洲精品| 91成人精品视频| 国模极品一区二区三区| 国产成人精品综合| 免费 国产 无码久久久| 欧美精品啪啪一区二区三区| 日韩毛片免费观看| 2020久久国产综合精品swag| 色欲国产一区二区日韩欧美| 亚洲成av人无码综合在线观看| 天堂亚洲网| 婷婷亚洲天堂| 日韩一区二区三免费高清| 亚洲无码37.| 欧美激情伊人| 久久中文电影| 欧美性久久久久| 麻豆a级片| 国产99热| 亚洲色精品国产一区二区三区| 国产成人h在线观看网站站| 国产中文一区二区苍井空| 免费在线a视频| 精品国产Av电影无码久久久| 国产呦精品一区二区三区网站| 国产成熟女人性满足视频| 亚洲AV无码不卡无码| 欧美日韩一区二区三| 国产欧美日韩va另类在线播放| 国产成人欧美| 国产在线专区| 最新日韩AV网址在线观看| 精品久久人人爽人人玩人人妻| 高清国产va日韩亚洲免费午夜电影| 青青草欧美| 71pao成人国产永久免费视频| 色综合五月婷婷| 五月婷婷丁香综合| 手机在线看片不卡中文字幕| 免费三A级毛片视频| 国产精品嫩草影院视频| 色悠久久久| 欧美va亚洲va香蕉在线| 99久久精品美女高潮喷水| 美女高潮全身流白浆福利区| 精品精品国产高清A毛片| 波多野结衣一区二区三视频| 免费亚洲成人| 国产地址二永久伊甸园|