反應式程式設計是正確的方法嗎? - 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。延續表示執行狀態,即要執行的程式碼,包括執行上下文,例如呼叫引數,堆疊等。然後,排程程式確保所有延續均勻執行。
相關文章
- 什麼是反應式程式設計?程式設計
- 反對函數語言程式設計的政治正確函數程式設計
- .Net 中的反應式程式設計程式設計
- 構建應用程式的正確方法
- 聊聊Spring Reactor反應式程式設計SpringReact程式設計
- 反應式程式設計讀書筆記程式設計筆記
- 響應式設計:做出正確的選擇——資料資訊圖
- 反應式程式設計在微服務下的重生程式設計微服務
- 業務程式碼程式設計陷阱案例 - jaxenter程式設計
- 程式設計師正確看程式碼的方式程式設計師
- 一個非常正確且強大的程式設計學習方法程式設計
- 【微信小程式】正確建立 [雲函式] [login] 的方法微信小程式函式
- 如何正確的開始用 Go 程式設計Go程式設計
- 學習風變程式設計,是我做過最正確的決定!程式設計
- 程式設計師計算私活薪資的正確方式程式設計師
- 提出問題,解答問題!這才是理解程式碼設計的正確方法
- Go併發程式設計--正確使用goroutineGo程式設計
- 老闆該如何正確的犒賞程式設計師程式設計師
- 《反應式應用開發》之“什麼是反應式應用”
- JavaScript 設計模式 :正確使用物件導向程式設計的姿勢JavaScript設計模式物件程式設計
- 使用者需求+設計原則+正確應用 =設計方案
- Node.JS程式設計師的反應Node.js程式設計師
- 你是浪漫的程式設計師嗎?程式設計師
- 程式設計師玩連連看的正確姿勢程式設計師
- Python 開發者面向文件程式設計的正確姿勢Python程式設計
- 趣圖:和程式設計師交流的正確姿勢程式設計師
- [譯]響應式 Iframe - 正確的開啟方式
- Qt程式進入等待睡眠的正確方法QT
- 你寫的 return null 正確嗎?Null
- 好程式設計師前端教程-MVC框架的正確構建程式設計師前端MVC框架
- 這才是開啟風變程式設計的正確操作方式程式設計
- 解構反應式程式設計——Java8,RxJava,Reactor之比較程式設計RxJavaReact
- 你是優秀的程式設計師嗎?程式設計師
- jivejdon3中的mysql-ds.xml部署是正確的嗎MySqlXML
- 通俗解釋什麼是響應式程式設計?程式設計
- 記住密碼”功能的正確設計密碼
- EBS 11i 輸入正確密碼後無反應密碼
- 程式設計師遇到Bug時的30個反應程式設計師