轉自:百家號-薇薇心語java
各位Javaer們,你們都在用SpringMVC吧?當咱們不亦樂乎的用着SpringMVC框架的時候,Spring5.x又悄(da)無(zhang)聲(qi)息(gu)的推出了Spring WebFlux。web? 不是已經有SpringMVC這麼好用的東西了麼,爲啥又冒出個WebFlux? 這玩意兒是什麼鬼?react
Spring WebFlux特性web
特性一 異步非阻塞編程
衆所周知,SpringMVC是同步阻塞的IO模型,資源浪費相對來講比較嚴重,當咱們在處理一個比較耗時的任務時,例如:上傳一個比較大的文件,首先,服務器的線程一直在等待接收文件,在這期間它就像個傻子同樣等在那兒(放學別走),什麼都幹不了,好不容易等到文件來了而且接收完畢,咱們又要將文件寫入磁盤,在這寫入的過程當中,這根線程又再次懵bi了,又要等到文件寫完才能去幹其它的事情。這一前一後的等待,不浪費資源麼?服務器
沒錯,Spring WebFlux就是來解決這問題的,Spring WebFlux能夠作到異步非阻塞。仍是上面那上傳文件的例子,Spring WebFlux是這樣作的:線程發現文件還沒準備好,就先去作其它事情,當文件準備好以後,通知這根線程來處理,當接收完畢寫入磁盤的時候(根據具體狀況選擇是否作異步非阻塞),寫入完畢後通知這根線程再來處理(異步非阻塞狀況下)。這個用腳趾頭都能看出相對SpringMVC而言,能夠節省系統資源。666啊,有木有!框架
特性二 響應式(reactive)函數編程異步
若是你以爲java8的lambda寫起來很爽,那麼,你會再次喜歡上Spring WebFlux,由於它支持函數式編程,得益於對於reactive-stream的支持(經過reactor框架來實現的),喜歡java8 stream的又有福了。爲何要函數式編程? 這個別問我,我也不知道,或許是由於bi格高吧,哈哈,開玩笑啦。函數式編程
特性三 再也不拘束於Servlet容器函數
之前,咱們的應用都運行於Servlet容器之中,例如咱們你們最爲熟悉的Tomcat, Jetty...等等。而如今Spring WebFlux不只能運行於傳統的Servlet容器中(前提是容器要支持Servlet3.1,由於非阻塞IO是使用了Servlet3.1的特性),還能運行在支持NIO的Netty和Undertow中。spa
因此,看完Spring WebFlux的新特性以後,心裏五味雜陳的我,只能用一個表情來形容:
以上就是Spring WebFlux的主要的三大特性,固然,只是簡單的介紹了一下,可能有些javaer對特性一中的所謂的IO模型這個還比較模糊,不要着急,下一次,咱就再介紹一下IO模型,這對後面理解這個框架是頗有幫助的。Spring WebFlux是基於reactor框架之上的,reactor框架是對reactive-stream的實現,所以,後面還會詳細介紹這兩個東西,爲了去理解Spring WebFlux框架的源碼。
好啦,本篇是《深刻淺出Spring Webflux系列》的第一篇,就到此結束啦。
我對本身的表現很滿意,由於在沒包含一行代碼的狀況下,竟然把口水話都湊足了這麼多字,哈哈。。。
另外,仍是要到個歉,以前由於帳號被盜,文章被人刪除了,而後還亂髮了幾篇什麼雜七雜八的廣告文,問過頭條客服,說不能恢復被刪除的文章,這當心髒所以被傷了,因此連續半年多都沒來更新了。
接下來,將更新《深刻淺出Spring Webflux系列》等一系列文章,而後多是JVM調優相關,到時候具體再看狀況。。