如何理解 Spring Webflux 的 非阻塞 ?

時間 2021-05-11 17:10:22

1樓:

題主的理解沒什麼大問題,將執行緒解耦,請求執行緒與工作執行緒分開,一些特殊的場景下對併發量的提公升明顯,現在也有非同步的JDBC,以後應該前景廣闊。

2樓:lblblong

沒玩過 webflux,但我覺得這個概念和 nodejs 很像

用乙個主線程處理所有使用者請求,在遇到資料庫查詢的時候就掛起給工作執行緒去做,工作執行緒拿到資料庫結果後丟到事件佇列裡,當主線程空閒的時候就去事件佇列裡獲取返回的資料,再返回給前端。

有興趣了解一下 nodejs 吧。

3樓:

在阻塞程式設計模式裡,任何乙個請求,都需要乙個執行緒去處理,如果io阻塞了,那麼這個執行緒也會阻塞在那,相當於你說的場景會有乙個執行緒卡在那卡10秒。執行緒資源是很珍貴的,這種大延遲的場景併發就很難上去,畢竟乙個併發就消耗乙個執行緒

而webflux裡面,乙個請求進來,除了一些資料封裝是在worker執行緒裡執行,在io阻塞的時候,實際上是把資料直接寫入socket就不管了,不需要消耗乙個執行緒。一直等到對方發回資料,再拿乙個worker執行緒去處理資料,這中間只需要一些記憶體儲存上下文資訊,基本不消耗任何其他資源,這也就是webflux特別推薦的場景:io集中並且延遲較大,並且延遲越大優勢體現越明顯

4樓:JasonMing

需要的時間是不變的(只有乙個任務的前提下),但是reactive方式可以把任務「打散」,從而把io請求單獨分派到io執行緒,不會阻塞當前的請求處理執行緒,從而極大程度地提高請求執行緒的吞吐量。

5樓:業餘草

關於 webflux 我寫了很多的教程。

6樓:海淀遊民

如果執行完成需要 10s,那麼用了 WebFlux 返回給前端還是 10s。

WebFlux 真正的意義是,當耗時的,像訪問檔案或者資料庫那樣的處理發生時,它可以把使用的執行緒讓渡出來,供其它請求去使用。所以它提高的是整個系統的吞吐率,而不是單個請求的執行速度。

不過,目前來看,我覺得WebFlux 在業務處理場合還沒什麼太大意義,因為 JDBC 是阻塞的,

理解應該如何理解?

CHON 如果兩種 理解 在同一平面,在邏輯上,這是乙個關於表意的 自指性 問題,轉化成問題 我能認識自己嗎 但如果兩種 理解 不在同一平面,一種理解是相對高位,一種理解是相對低位,同樣也可以看作是函式的公升降階問題 那麼跳出問題本身,我們是否真的需要 理解 這種概念?以及在各種語境中 理解 的各自...

如何理解「同情之理解」這句話?

了解之同情 這是陳寅恪在為馮友蘭 中國哲學史 上冊所寫的審查報告中的一句話,原文如下 了解之同情 是針對古代學說而言的,有兩個含義,一是 了解 二是 同情 了解 是屬於科學認知的範疇。我們古人雖然有很多共通之處,但畢竟世殊事異,古今的政治制度,社會風氣,思想觀念,乃至自然環境,都和現在有很大的差距,...

如何理解中庸

i007 沒啥,孔子是可愛的,千萬別太較真,太認真也不行,差不多就行了。中心,如心,忠恕。鼓勵活出你自己,但是永遠允許你不做英雄。2019.04.29.周一。 史思明 聖人說極高明而道中庸。孔子都說中行很難啊。退而求其次,他也只能選狂狷之士了。我個人的理解,比如乙個仁人志士勇敢赴死。就說譚嗣同。我們...