電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>嵌入式開發(fā)>異步任務處理在復雜Web應用中的研究設計

異步任務處理在復雜Web應用中的研究設計

2017-10-24 | rar | 0.6 MB | 次下載 | 1積分

資料介紹

在Web應用中,某些功能的實現(xiàn)邏輯很復雜、執(zhí)行比較耗時[1],例如涉及外部系統(tǒng)調(diào)用、多數(shù)據(jù)源等;此時,希望可以讓這些復雜的業(yè)務邏輯放在后臺執(zhí)行,而前臺與用戶的交互可以不用等待,從而提高用戶體驗;或者需要以一定時間間隔重復運行任務、或在每天的指定時間運行任務的情況。為此,需要控制大型任務對服務器資源的消耗,降低Web服務器的并發(fā)連接數(shù)目,這就需要將大型任務的提交和執(zhí)行分開,使服務器接受任務后立即斷開與客戶端的連接,減少服務器的并發(fā)連接數(shù),而任務則推遲到服務器資源許可時執(zhí)行,以抑制服務器資源的峰值消耗。
  為盡量減少耗時操作對執(zhí)行的影響,本文提出了異步任務的處理,使用多線程來管理耗時任務,作為后臺進程執(zhí)行;同時把任務信息都持久化在數(shù)據(jù)庫中,保證了異步任務處理的靈活性、可靠性。
  1 多線程
  1.1線程池
  一個線程是程序中的一條執(zhí)行流,是操作系統(tǒng)分配處理器的基本單位。并發(fā)是程序中多條執(zhí)行流的同時推進,多任務并發(fā)對應多線程并發(fā)[2]。
  但是為每個任務創(chuàng)建一個線程,當任務完成時撤消對應的線程存在明顯的缺陷。線程的創(chuàng)建需要一定的時間,給任務請求的響應帶來延遲,線程的創(chuàng)建和撤消也給操作系統(tǒng)帶來額外的管理負擔,若頻繁“創(chuàng)建和撤消”,則將明顯增加系統(tǒng)的額外開銷。為有效降低線程重復創(chuàng)建和撤銷方面的開支可以采用線程池技術。
  線程池技術提供了一種較好的解決方案[3]:系統(tǒng)維護由若干個線程組成的線程池。當有任務請求到達時,由池中的一個線程為之運行,在任務完成后不是將該線程撤消而是將其歸還線程池,使之能夠為后續(xù)到達的任務服務;若線程池中沒有空閑的線程,則任務進入等待狀態(tài)直到有空閑的線程。
  1.2 Java中的線程池實現(xiàn)機制
  Java在語言級實現(xiàn)了功能豐富的多線程編程機制[4],對線程池的建立和維護提供了強大的支持。特別在JDK1.5及以后的版本中,任務執(zhí)行抽象的首選不再是Thread,而是Executor。Executor雖是一個簡單的接口,但它提供了異步任務執(zhí)行框架并支持多種不同類型的任務執(zhí)行策略,ExecutorService接口和ScheduledExecutorService接口對Executor進行了擴展,添加了管理線程執(zhí)行和調(diào)度線程池的若干方法。通過Executors工具類提供的靜態(tài)工廠方法可以創(chuàng)建符合特定需求的基于線程池執(zhí)行框架。
  newChachedThreadPool()方法用于創(chuàng)建可緩存線程池的執(zhí)行框架。當新的請求任務到達時,執(zhí)行框架將盡可能地重用池中的空閑線程,若此時池中沒有空閑線程,則添加新線程,這個方法對池的大小沒有限制。另一方面,該執(zhí)行框架能夠自動回收空閑時間超過60 s的線程,以合理使用系統(tǒng)資源。對于執(zhí)行大量短異步任務的程序而言,這種方式的線程池通常可提高性能。
  newFixedThreadPool(int nThreads)方法建立的執(zhí)行框架中的線程池具有固定數(shù)量的線程。每提交一個任務它就創(chuàng)建一個線程,直到達到池的限定值nThreads,線程池的長度不再變化,新到達的任務在一個遵循先來先服務(FIFS)規(guī)則的無界隊列中等待執(zhí)行。
  newScheduledThreadPool(int nThreads)方法建立的執(zhí)行框架中的線程池也是定長的,它支持定時的以及周期性的任務的執(zhí)行。
  這些工廠方法返回的Executor 都是ThreadPoolExecutor()類的常用實例,能滿足大部分線程池的應用需求。
  2 設計思路
  為保證異步任務處理的靈活性和可靠性,本文設計的思路為:任務持久化+Java線程池+任務調(diào)度。
  2.1 任務持久化
  將待處理的任務信息保存在可信任的數(shù)據(jù)庫中,同時要確保當任務處理服務器出問題后這些未執(zhí)行成功、或未開始執(zhí)行的任務不會被丟失。
  2.2 任務調(diào)度
  當任務信息都持久化在數(shù)據(jù)庫中之后,需要將這些信息讀取出來執(zhí)行具體的業(yè)務邏輯操作,本文通過ScheduledExecutorService來實現(xiàn)對任務的循環(huán)調(diào)度,例如可采取每隔2 min掃描一次待處理任務列表,若有記錄則提取出來執(zhí)行。
  3 具體實現(xiàn)
  異步任務處理中各組成部分在運行過程中的調(diào)用關系如圖1。
  異步任務處理在復雜Web應用中的研究設計
  當客戶端訪問服務器時,有耗時操作的任務,則把該任務放入數(shù)據(jù)庫中。服務器每隔一段時間輪詢存放待處理任務的表,若表中有任務,則任務調(diào)度線程池采用多線程機制來執(zhí)行該任務。任務執(zhí)行成功后,刪除待處理任務表中的該任務信息,否則把該任務信息更新到任務失敗表,進行人工干預。
  3.1 任務數(shù)據(jù)表
  建兩張表,一張task表,用來存放待處理的任務;一張task_fail表用來存放失敗的任務。兩張表的結構一樣,結構如表1所示。
  異步任務處理在復雜Web應用中的研究設計
  task表主要用來保存所有待處理的任務,每條任務信息屬于一種任務類型,由task_handle字段標識,任務類型值為該類型任務的具體實現(xiàn)類名。task_params 字段提供了執(zhí)行該任務需要的所有參數(shù),為字符串,需要在具體任務實現(xiàn)類中解析。handle_time字段提供了任務待執(zhí)行的日期。
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1TC358743XBG評估板參考手冊
  2. 1.36 MB  |  330次下載  |  免費
  3. 2開關電源基礎知識
  4. 5.73 MB  |  6次下載  |  免費
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設計
  8. 0.60 MB  |  3次下載  |  免費
  9. 5基于FPGA的光纖通信系統(tǒng)的設計與實現(xiàn)
  10. 0.61 MB  |  2次下載  |  免費
  11. 6基于FPGA的C8051F單片機開發(fā)板設計
  12. 0.70 MB  |  2次下載  |  免費
  13. 751單片機窗簾控制器仿真程序
  14. 1.93 MB  |  2次下載  |  免費
  15. 8基于51單片機的RGB調(diào)色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21548次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設計》 溫德爾著
  16. 0.00 MB  |  6653次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537796次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191185次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183278次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費