- Java異步編程實戰
- 翟陸續
- 872字
- 2020-01-15 10:22:28
1.1 異步編程概念與作用
通常Java開發人員喜歡使用同步代碼編寫程序,因為這種請求(request)/響應(response)的方式比較簡單,并且比較符合編程人員的思維習慣;這種做法很好,直到系統出現性能瓶頸。在使用同步編程方式時,由于每個線程同時只能發起一個請求并同步等待返回,所以為了提高系統性能,此時我們就需要引入更多的線程來實現并行化處理。但是多線程下對共享資源進行訪問時,不可避免會引入資源爭用和并發問題;另外,操作系統層面對線程的個數是有限制的,不可能通過無限增加線程數來提供系統性能;而且,使用同步阻塞的編程方式還會浪費資源,比如發起網絡IO請求時,調用線程就會處于同步阻塞等待響應結果的狀態,而這時候調用線程明明可以去做其他事情,等網絡IO響應結果返回后再對結果進行處理。
可見通過增加單機系統線程個數的并行編程方式并不是“靈丹妙藥”。通過編寫異步、非阻塞的代碼,則可以使用相同的底層資源將執行切換到另一個活動任務,然后在異步處理完成后再返回到當前線程繼續處理,從而提高系統性能。
異步編程是可以讓程序并行運行的一種手段,其可以讓程序中的一個工作單元與主應用程序線程分開獨立運行,并且在工作單元運行結束后,會通知主應用程序線程它的運行結果或者失敗原因。使用異步編程可以提高應用程序的性能和響應能力等。
比如當調用線程使用異步方式發起網絡IO請求后,調用線程就不會同步阻塞等待響應結果,而是在內存保存請求上下文后,馬上返回去做其他事情,等網絡IO響應結果返回后再使用IO線程通知業務線程響應結果已經返回,由業務線程對結果進行處理。可見,異步調用方式提高了線程的利用率,讓系統有更多的線程資源來處理更多的請求。
比如在移動應用程序中,在用戶操作移動設備屏幕發起請求后,如果是同步等待后臺服務器返回結果,則當后臺服務操作非常耗時時,就會造成用戶看到移動設備屏幕凍結(一直處于請求處理中),在結果返回前,用戶不能操作移動設備的其他功能,這對用戶體驗非常不好。而使用異步編程時,當發起請求后,調用線程會馬上返回,具體返回結果會通過UI線程異步進行渲染,且在這期間用戶可以使用移動設備的其他功能。
- Learning Microsoft Windows Server 2012 Dynamic Access Control
- 程序設計與實踐(VB.NET)
- Microsoft Dynamics 365 Extensions Cookbook
- 算法基礎:打開程序設計之門
- 認識編程:以Python語言講透編程的本質
- Reactive Programming with Swift
- BeagleBone Media Center
- 面向STEM的Scratch創新課程
- Java程序員面試算法寶典
- QGIS By Example
- 精通MATLAB(第3版)
- UI設計全書(全彩)
- Spring技術內幕:深入解析Spring架構與設計原理(第2版)
- 編程可以很簡單
- 玩轉.NET Micro Framework移植:基于STM32F10x處理器