異步編程

  Ebay技術架構倡導到處異步,異步能夠提高系統的可伸縮性,有一種誤解:認為異步就會慢于同步,其實異步后才能并行并發,利用多CPU的并行并發處理要比同步串聯處理無疑性能要提升多。 異步的目的是從設計上解耦,從執行順序上進行切分,將串行變成并行。

  傳統的同步編程是一種請求響應模型,調用一個方法,等待其響應返回,異步編程就是要重新考慮是否需要響應的問題,也就是縮小需要響應的地方。因為越快獲得響應,就是越同步化,順序化,事務化,性能差化。

  異步編程通常是通過fire and forget方式實現,發射事件后即忘記,做別的事情了,無需立即等待剛才發射的響應結果了。(發射事件的地方稱為生產者,而將在另外一個地方響應事件的處理者稱為消費者)

  關鍵問題是我們為什么要等待響應呢?因為希望基于響應再繼續執行一些邏輯,換一個思路,將這些邏輯移植到事件的消費者那里去做,而不是在當前生產者實現,這其實也是reactive編程的一個特點。

  比如x是1,y=x+1,那么y是2, 如果x變為3,y還是3,通過reactive函數編程,時刻觀察x變化,x一旦變為3,觀察者也就是消費者響應將y變成3+1。

  所以,異步編程是一種事件驅動編程,需要完全改變思路,將“請求響應”的思路轉變到“事件驅動”思路上,是一種軟件編程思維的轉變。

  基于異步通信的應用程序實現了松耦合的設計,好過于純粹基于同步的方法調用。生產者和消費者可以各自實現調用,不要關心事件是如何傳播的細節,通過接口實現通信。這就易于延伸,發展和維護,帶來更多的靈活性,并降低了維護成本。

  一個非阻塞的異步應用程序在重負載下可以擁有更低的延遲和更高的吞吐量,這將導致更低的運營成本,提高了資源利用率以及良好的終端用戶體驗。

  當應用程序遭遇高性能和可擴展性的要求時,這時很難預測會出現瓶頸的地方。因此,重要的是,將整個解決方案都設計為異步和非阻塞(整個系統都是)。

 

文章

為什么RESTful微服務和異步編程是一種趨勢?

Ratpack可快速開發異步響應式的Java Web應用

Lagom是一個集成ES/CQRS的Reactive微服務框架

如何讓Java以光的速度跨線程通信?

異步編程與事件驅動類WEB框架基準測試中性能排名前列

關于異步接口調用的疑問?

關于Ebay的架構之一Asynchrony Everywhere

Node.js的異步編程

Node.JS學習教程

異步編程專輯

教程

Node.js的Reactor模式 與異步編程

在Node.js中使用Javascript Generators

RxJS入門教程

RxJava教程

Java8的CompletableFuture

一個分布式異步RESTful框架原型案例代碼

 

參考專題

并發編程

Reactive編程

 

 

一级黄色录像影片 夫妻性生活影片 免费在线观看 一级a做爰片