官术网_书友最值得收藏!

1.1 異步編程概念與作用

通常Java開發人員喜歡使用同步代碼編寫程序,因為這種請求(request)/響應(response)的方式比較簡單,并且比較符合編程人員的思維習慣;這種做法很好,直到系統出現性能瓶頸。在使用同步編程方式時,由于每個線程同時只能發起一個請求并同步等待返回,所以為了提高系統性能,此時我們就需要引入更多的線程來實現并行化處理。但是多線程下對共享資源進行訪問時,不可避免會引入資源爭用和并發問題;另外,操作系統層面對線程的個數是有限制的,不可能通過無限增加線程數來提供系統性能;而且,使用同步阻塞的編程方式還會浪費資源,比如發起網絡IO請求時,調用線程就會處于同步阻塞等待響應結果的狀態,而這時候調用線程明明可以去做其他事情,等網絡IO響應結果返回后再對結果進行處理。

可見通過增加單機系統線程個數的并行編程方式并不是“靈丹妙藥”。通過編寫異步、非阻塞的代碼,則可以使用相同的底層資源將執行切換到另一個活動任務,然后在異步處理完成后再返回到當前線程繼續處理,從而提高系統性能。

異步編程是可以讓程序并行運行的一種手段,其可以讓程序中的一個工作單元與主應用程序線程分開獨立運行,并且在工作單元運行結束后,會通知主應用程序線程它的運行結果或者失敗原因。使用異步編程可以提高應用程序的性能和響應能力等。

比如當調用線程使用異步方式發起網絡IO請求后,調用線程就不會同步阻塞等待響應結果,而是在內存保存請求上下文后,馬上返回去做其他事情,等網絡IO響應結果返回后再使用IO線程通知業務線程響應結果已經返回,由業務線程對結果進行處理。可見,異步調用方式提高了線程的利用率,讓系統有更多的線程資源來處理更多的請求。

比如在移動應用程序中,在用戶操作移動設備屏幕發起請求后,如果是同步等待后臺服務器返回結果,則當后臺服務操作非常耗時時,就會造成用戶看到移動設備屏幕凍結(一直處于請求處理中),在結果返回前,用戶不能操作移動設備的其他功能,這對用戶體驗非常不好。而使用異步編程時,當發起請求后,調用線程會馬上返回,具體返回結果會通過UI線程異步進行渲染,且在這期間用戶可以使用移動設備的其他功能。

主站蜘蛛池模板: 三台县| 合水县| 宜都市| 曲松县| 怀宁县| 尼玛县| 襄樊市| 吉水县| 海淀区| 舞钢市| 维西| 江门市| 丽江市| 英吉沙县| 溧阳市| 遂溪县| 绩溪县| 甘洛县| 达孜县| 宜兰县| 黑河市| 高邮市| 井研县| 高邑县| 阿拉善左旗| 万源市| 新化县| 九寨沟县| 永川市| 砚山县| 龙口市| 朝阳市| 定襄县| 武定县| 盐城市| 普兰县| 旌德县| 滁州市| 米脂县| 浦县| 宣城市|