Project Loom fibers與RPC陷阱是一樣,試圖用同步方式封裝非同步操作,非常危險,它會淘汰Java Future嗎? -SoftwareMill
Loom的Fiber類似Scala和Kotlin的纖程,可以解決我們的併發問題,它與Java JDK的Futures 相比,解決了控制流丟失,上下文和virality丟失的問題。可悲的是,編寫併發程式還不止這些!
Fiber仍然是一個類似執行緒的構造,這意味著,如果我們要同時執行多個纖程,則需要某種方式進行協調。就像執行緒一樣。纖程需要在正確的時間建立,錯誤需要處理等。這也反映在提案中:作者不僅寫道continuations是一個低階的構造,而且纖程也是低階的。
因此,儘管光纖成功實現了座右銘“ 像同步一樣的程式碼,卻像非同步一樣工作 ”,但它們卻無法實現“ 簡化併發性 ”。
也許併發是一個固有的複雜問題?如果這是併發的本質,那麼我們將不得不忍受它。併發絕非易事。相反,我們可以嘗試使併發變得可理解。
人們已經嘗試多次實現“透明” RPC(遠端過程呼叫)。正如Martin Kleppmann在他的《設計資料密集型應用程式》一書中寫道:
RPC模型試圖在同一過程內(以這種抽象稱為位置透明性)使對遠端網路服務的請求看上去與用程式語言呼叫函式或方法相同。儘管乍一看RPC似乎很方便,但是該方法從根本上來說是有缺陷的。網路請求與本地函式呼叫有很大不同:
RPC和一般的任何網路呼叫都具有與普通函式呼叫明顯不同的特徵。它們是不可預測的:可以任意失敗,而不管輸入引數的值如何。他們可能需要花費任意時間才能完成,而正常功能會完成,失敗或迴圈。即使網路呼叫似乎失敗了,但從其他系統的角度來看,它仍然可能成功。
人們多次成為錯誤的RPC抽象的受害者。這就是為什麼我們必須對Loom的纖維之類的抽象格外謹慎。將所有內容都視為同步呼叫是很誘人的。但有時您必須抵制誘惑。
.....
因此,儘管Project Loom不會取代我們在Java中進行併發的方式,但它可能會在我們的工具箱中提供另一個工具。它肯定會被濫用,因為其他所有構造都在那裡。
點選標題見原文。
相關文章
- 危險就是一封郵件
- Java併發程式設計非同步操作Future和FutureTaskJava程式設計非同步
- Project Loom帶來Java併發模型革命? - infoworldProjectOOMJava模型
- 一個高頻問題:非同步操作會建立執行緒嗎?非同步執行緒
- ES6中Promise 承諾物件封裝非同步操作解析Promise物件封裝非同步
- project-loom-c5m:用Project Loom虛擬執行緒實現500萬長連線的實驗ProjectOOM執行緒
- Project Loom搶先體驗版ProjectOOM
- Java 18中啟動Project Loom數百萬執行緒JavaProjectOOM執行緒
- 非同步操作(一)非同步
- 使用WiFi真的有那麼危險嗎?WiFi
- 危險的 target=”_blank” 與 “opener”
- 危險的 target="_blank" 與 “opener”
- 非同步操作--BackgroundWorker應用非同步
- 測試與封裝5.1封裝
- 測試與封裝5.1.5.2封裝
- 5.2 測試與封裝封裝
- 5.1封裝與測試封裝
- (十九)冒險和預測,解決危險就能抓住機會
- 程式設計天賦是一種危險的神話程式設計
- iOS封裝彈框試圖iOS封裝
- 怎樣理解阻塞非阻塞與同步非同步的區別?非同步
- 美社交網站MySpace封閉數千危險賬號網站
- 9個“非常危險”的Linux命令,千萬不要隨意執行!Linux
- Java非同步程式設計:CompletableFuture與Future的對比Java非同步程式設計
- 利用goldengate進行同步操作測試Go
- Project Loom EA搶先體驗版本釋出ProjectOOM
- JAVA拾遺 — JMH與8個測試陷阱Java
- Flutter篇之你真的會使用Future嗎?Flutter
- Java開發中常見的危險訊號Java
- 不會用Java Future,我懷疑你泡茶沒我快, 又是超長圖文!!Java
- Java非同步之《我call(),Future在哪裡》Java非同步
- 同步與非同步 阻塞與非阻塞非同步
- 10個用Java謀生非常有趣的方式Java
- 銷量接近兩百萬的國產獨立遊戲要出續作了,它會是你想的那樣嗎?遊戲
- 深入SQLite,一網打盡“危險操作”SQLite
- RPC 是通訊協議嗎 ?→ 我們來看下它的演進過程RPC協議
- 作業五 測試與封裝封裝
- 單元測試與封裝5.1封裝