反應式程式設計是正確的方法嗎? - JAXenter
反應式程式設計承諾具有較低記憶體要求的企業Java應用程式的更高效能。通過避免阻塞始終導致作業系統中的程式和上下文切換的呼叫來實現此承諾。這種上下文切換具有高CPU和儲存器開銷,當然,這些開關減少了更少。然而,這種反應式程式設計的效能提升是以軟體可維護性較差為代價的。但更高的效能是否物有所值?有哪些替代品?這是本文仔細研究一下。
反應式程式設計有一些嚴重的缺點:寫入函式和執行程式碼的分離導致讀取和編寫程式碼的難度增加。為這種非同步程式碼編寫單元測試也很複雜。除錯程式碼更加困難。
Project Reactor是Spring的Reactive Web Framework的基礎,它已經有許多輔助構造,支援測試,除錯和上下文傳播(請參閱測試,除錯和上下文部分)。然而,僅僅需要這種輔助結構這一事實已經揭示了反應式程式設計的複雜性。因此,問題在於是否存在其他可行的替代方案來解決Java執行緒的昂貴上下文切換問題。
反應式程式設計解決了由使用本機執行緒和“每個請求一個執行緒”範例引起的效能問題。但是,此解決方案伴隨著更高的開發和維護複雜性,因為測試和除錯等變得更加複雜。
綠色執行緒是避免作業系統中的程式交換機造成的效能損失的可能方法。這些在Java 1.1中可用,但已經在Java 1.3中被丟棄,因為它們不允許使用多核或多處理器系統的好處。在JDK中引入另一種Green Threads(所謂的Fibers)的新嘗試是Project Loom。這個提議將伴隨著對Java作為一種衍生產品的延續的支援。此功能在其他程式語言(如Kotlin和Go,名稱為Coroutines)中是已知的。
如果將Project Loom整合到JDK中,以及它對Reactive Programming的分發有何影響,您可能會感到好奇。從效能的角度來看,這可能會使Java世界變得多餘:要實現Fibers,Java中執行緒的執行將分為兩部分,即continuation和scheduler。延續表示執行狀態,即要執行的程式碼,包括執行上下文,例如呼叫引數,堆疊等。然後,排程程式確保所有延續均勻執行。
相關文章
- 什麼是反應式程式設計?程式設計
- 反對函數語言程式設計的政治正確函數程式設計
- 聊聊Spring Reactor反應式程式設計SpringReact程式設計
- 反應式程式設計讀書筆記程式設計筆記
- 反應式程式設計在微服務下的重生程式設計微服務
- 程式設計師正確看程式碼的方式程式設計師
- 業務程式碼程式設計陷阱案例 - jaxenter程式設計
- 【微信小程式】正確建立 [雲函式] [login] 的方法微信小程式函式
- 如何正確的開始用 Go 程式設計Go程式設計
- 程式設計師計算私活薪資的正確方式程式設計師
- 提出問題,解答問題!這才是理解程式碼設計的正確方法
- 學習風變程式設計,是我做過最正確的決定!程式設計
- Go併發程式設計--正確使用goroutineGo程式設計
- 程式設計師玩連連看的正確姿勢程式設計師
- 實驗設計(DOE)的正確使用方法,拿走不謝!
- 《反應式應用開發》之“什麼是反應式應用”
- [譯]響應式 Iframe - 正確的開啟方式
- 解構反應式程式設計——Java8,RxJava,Reactor之比較程式設計RxJavaReact
- 好程式設計師前端教程-MVC框架的正確構建程式設計師前端MVC框架
- 這才是開啟風變程式設計的正確操作方式程式設計
- 使用反應式程式設計替換Java自動資源管理 - Arvind程式設計Java
- 翻譯 | 新手開始學習程式設計的正確姿勢程式設計
- shell程式設計(四)| grep正規表示式程式設計
- shell程式設計(四)| sed 正規表示式程式設計
- 05 shell程式設計之正規表示式程式設計
- Qt Creator程式設計之正規表示式QT程式設計
- 開發函式計算的正確姿勢 —— 依賴安裝方法一覽函式
- node 升級的正確方法
- Axios的正確食用方法iOS
- 什麼是反應式應用開發?
- 揚帆起航:從指令式程式設計到函式響應式程式設計程式設計函式
- ES6 箭頭函式你正確使用了嗎函式
- 響應式設計?響應式設計的基本原理是什麼?如何做?
- Kubernetes宣告式API與程式設計正規化API程式設計
- 函式響應式程式設計與RxSwift函式程式設計Swift
- 談反應式程式設計在服務端中的應用,資料庫操作優化,提速 Upsert程式設計服務端資料庫優化
- 【科普】碼農是程式設計師嗎?碼農與真正程式設計師的區別是啥?程式設計師
- spring AOP 程式設計式應用Spring程式設計