2017-10-06 266 views
3

我想了解Spring WebFlux。到目前爲止,我發現的東西在覈心是被動的,沒有Servlet API,每個請求沒有線程,HTTP 2,服務器推送,應用程序/流+ json。春季MVC(異步)與春季WebFlux

但是Spring MVC中的異步調用有什麼區別?我的意思是在Spring MVC中,當你返回Future,DefferedResult等時,你可以在一個單獨的線程中執行請求處理程序(控制器方法)中的邏輯,所以你也可以從保存用於分派請求的線程池資源中獲益。

那麼你可以強調與此相關的差異嗎?爲什麼WebFlux在這裏更好?

非常感謝您的時間!

+1

反應式編程是推動式驅動的並且使用單個調度程序線程(這是高效的),而舊模型仍然限制在線程池中的線程數。 –

+0

@M。 Deinum但在這種情況下,我受限於一個線程可以處理的負載。爲什麼不使用它們中的幾個,而不僅僅是一個具有多核系統的系統? –

+1

這是一個事件調度程序線程,它是一個完全不同的模型。它只發送事件(非常快),而另一個模型仍然阻塞。 –

回答

3

Servlet異步模型在容器線程(1個Servlet請求/線程模型)和應用程序中的請求處理之間引入了異步邊界。處理可以發生在不同的線程上或等待。最後,你必須發回一個容器線程並以阻塞的方式讀/寫(InputStreamOutputStream固有地阻塞了API)。使用該模型,需要多個線程來實現併發(因爲其中許多線程可能會被阻塞以等待I/O)。這會花費資源,這可能是一種折衷,取決於您的使用情況。

使用非阻塞代碼,您只需要幾個線程同時處理大量請求。這是一個不同的併發模型;像任何模型一樣,它有益處和折衷。

有關該比較的更多信息,應該對Servlet vs. Reactive stacks talk感興趣。

+1

感謝您的答案和有用的鏈接! –