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執行緒
- Java 18中啟動Project Loom數百萬執行緒JavaProjectOOM執行緒
- Project Loom搶先體驗版ProjectOOM
- Trupanion:寵物保險會是它經濟的新風向嗎?
- Java非同步程式設計:CompletableFuture與Future的對比Java非同步程式設計
- 怎樣理解阻塞非阻塞與同步非同步的區別?非同步
- 起底語音對抗樣本:語音助手危險了嗎?
- 平面設計會被淘汰嗎?
- Project Loom EA搶先體驗版本釋出ProjectOOM
- python中怎樣封裝與引用Python封裝
- 一道非常棘手的 常見Java 面試題:i++ 是執行緒安全的嗎?Java面試題執行緒
- JAVA拾遺 — JMH與8個測試陷阱Java
- Java非同步之《我call(),Future在哪裡》Java非同步
- 關於js延遲載入(非同步操作)的方式JS非同步
- 使用WiFi真的有那麼危險嗎?WiFi
- javascript - 非同步操作JavaScript非同步
- 不會用Java Future,我懷疑你泡茶沒我快, 又是超長圖文!!Java
- 9個“非常危險”的Linux命令,千萬不要隨意執行!Linux
- java同步非阻塞IOJava
- 危險的 target=”_blank” 與 “opener”
- 危險的 target="_blank" 與 “opener”
- 同步、非同步、阻塞與非阻塞非同步
- 同步非同步 與 阻塞非阻塞非同步
- RPC 是通訊協議嗎 ?→ 我們來看下它的演進過程RPC協議
- 如何解讀 Java IO、NIO 中的同步阻塞與同步非阻塞?Java
- 從同步原語看非阻塞同步以及Java中的應用Java
- Flutter篇之你真的會使用Future嗎?Flutter
- Java基礎04 封裝與介面Java封裝
- 應用伺服器與資料庫伺服器是一樣的嗎?伺服器資料庫
- JavaScript 非同步操作原理JavaScript非同步
- 最佳化系統效能:同步與非同步操作的巧妙平衡非同步
- java 封裝Java封裝
- 用原生JS封裝外掛的方式有哪些?JS封裝