異步編程之美

         在大學畢業後的工做期間,從最開始的編寫同步代碼,到慢慢爲了提升系統性能,把一些任務使用異步的方式來處理,從而提升系統的響應時間,那麼就會產生一些新的問題,如何監控在異步線程執行的任務的執行狀態,是否出現了錯誤,出現了錯誤怎麼處理,系統建立大量線程又該如何統一管理,這些種種問題都讓使我意識到深刻了解異步編程的必要性。html

        同步的代碼, 在不少狀況下, CPU實際上是在等待中度過的, 好比等待一個網絡鏈接, 等待MySQL服務器的數據返回異步的代碼, 就是把這些等待的時間給充分利用起來了, 把網絡鏈接, 訪問數據庫這種耗時的工做時都在註冊一個callback或者event以後切換出來,讓CPU先去幹別的活(例如響應別的請求), 當網絡鏈接,數據庫返回結果時再回來執行剛纔的callback中的代碼,異步的代碼能夠大大的提高系統的容量上限, 由於充分利用了空閒的CPU時間, 可是對於單個的請求的性能提高幫助比較有限 (除非你的單個請求大量依賴這種IO操做)。程序員

        Java的異步編程實際上是一個充分利用計算機CPU資源,不想讓主程序阻塞在某個長時間運行的任務上,這類耗時的任務能夠是IO操做、遠程調用以及高密度計算任務。若是不使用多線程異步編程,咱們的系統就會阻塞在耗時的子任務上,會致使極大延長完成主函數任務的時間。Java以及提供了豐富的API,來完成多線程異步編程。從NIO、Future,CompletableFuture、Fork/Join以及parrallelStream。另外google的guava框架提供了ListenableFuture和Spring的@Async來簡化異步編程。面試

       在我來到如今這家公司的時候,老大就安排我一個任務,要我對線程池進行監控,若是線程執行失敗,須要記錄下來,併發送送通知,其實那時候我對異步編程的理解僅僅是new Thread()的階段,對於線程池的概念都還很模糊,好幾回面試的時候面試官問我,建立線程池有多少中方式,說說線程的特性,那時候我都是一臉懵逼的,話說回來,爲了解決老大交給的這個任務,我開始閱讀一些資料來對增強對異步編程的理解,一步一步調試查看ThreadPoolExecutor的源碼,不斷嘗試在哪些環節能夠加入監控,最終本身實現了一個可監控的ThreadPoolExecotor,讓線程執行再也不不可知,也不用再手動的去恢復線程執行失敗的數據,那時候線程執行失敗徹底不知道,全靠線上日誌一點一點排查,真的是心塞,從這個事情以後,對於異步編程的也有了一些初步的瞭解,也醉心於其中的研究。因而在空閒之餘又研究了ForkJoin框架,對於這個新東西,使用起來真的是大大的提升效率,一樣的本身實現了一個可監控的ForkJoin,對遞歸處理的第一個錯誤進行捕獲,而且暴露函數式接口,來針對執行失敗的回滾處理。在整個對異步編程的學習過程當中,收穫了許多,也但願能夠閱讀更多的資料來加強實戰能力,這時候一本實戰的異步編程的書籍就顯得尤爲重要了。數據庫

        異步編程是高性能程序的利器,同時也是程序員面臨的挑戰之一,要想寫出優秀的異步編程代碼,既須要對異步編程的原理有深入的理解,也須要對各類異步編程框架有全面的掌握。以前有幸讀過加多老師編寫的Java併發編程之美,其通俗易懂的講解方式幫助我完成多線程併發編程從入門到實踐的飛躍!並且經過許多案例來加深對併發編程的理解,實乃居家旅行的必備書籍。如今加多老師又出了《Java異步編程實戰》這本書,深刻剖析了Java、go語言編程,如今對於異步編程的書籍並很少,相信經過閱讀此書,可讓你對異步編程的理解更上一層樓。編程

        《Java異步編程實戰》針對各類常見異步編程場景,從編程語言、開發框架等角度深刻講解了異步編程的原理和方法。做者是淘寶的資深Java技術工程師,在Java異步編程、併發編程領域有深厚的積累。整本書由淺入深,首先介紹了異步編程的概念、適用場景,以及如何使用線程和線程池來實現異步編程;再講解JDK中的各類Future及其內部實現原理,而後講解如何使用Future實現異步編程,以及如何結合JDK8 Stream 和Future實現異步編程;以及對Spring框架中提供的異步執行能力進行詳細分析,包含Spring中如何對TaskExecutor進行抽象,如何使用註解@Async實現異步編程,以及其內部實現原理;最後講解了最近比較熱門的反應式編程相關的內容,包含什麼是反應式編程,如何使用反應式編程規範的庫RxJava和Reactor庫實現異步編程,看到這裏趕忙點擊下面的連接買起來吧。服務器

噹噹購買連接:http://product.dangdang.com/28499408.html<br/> 網絡

相關文章
相關標籤/搜索