spring mvc與spring webflux簡介

同步、異步、阻塞、非阻塞

老張愛喝茶,廢話不說,煮開水。
出場人物:老張,水壺兩把(普通水壺,簡稱水壺;會響的水壺,簡稱響水壺)。
1 老張把水壺放到火上,立等水開。(同步阻塞)
老張覺得自己有點傻
2 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。(同步非阻塞)
老張還是覺得自己有點傻,於是變高端了,買了把會響笛的那種水壺。水開之後,能大聲發出嘀~~~~的噪音。
3 老張把響水壺放到火上,立等水開。(異步阻塞)
老張覺得這樣傻等意義不大
4 老張把響水壺放到火上,去客廳看電視,水壺響之前不再去看它了,響了再去拿壺。(異步非阻塞)
老張覺得自己聰明瞭。

所謂同步異步,只是對於水壺而言。
普通水壺,同步;響水壺,異步。
雖然都能幹活,但響水壺可以在自己完工之後,提示老張水開了。這是普通水壺所不能及的。
同步只能讓調用者去輪詢自己(情況2中),造成老張效率的低下。

所謂阻塞非阻塞,僅僅對於老張而言。
立等的老張,阻塞;看電視的老張,非阻塞。
情況1和情況3中老張就是阻塞的,媳婦喊他都不知道。雖然3中響水壺是異步的,可對於立等的老張沒有太大的意義。所以一般異步是配合非阻塞使用的,這樣才能發揮異步的效用。

個人理解:
同步:一直等待得到結果。

異步:一個線程接受請求後 直接返回 並不會得到結果 等後端處理完畢之後 在選擇一個線程返回結果。

阻塞:等待着一個請求完成 掛起線程 沒完成的話下一個請求不執行

非阻塞:在一個請求執行時並且沒得到結果 不會阻塞改線程

spring mvc

spring mvc一般會部署在tomcat上 而tomcat一般會建立一個線程池 每發送一個請求 就會爲請求綁定一個線程 對於每個線程是同步阻塞的(也可以配置成異步 這樣會提升吞吐量) 當請求過多 線程池中線程消耗完畢之後 服務就會阻塞 這樣會大大影響 服務的效率 同時因爲線程池也太過沉重 這樣就引出了webFlux

spring webFlux

WebFlux只是響應式編程中的一部分(在Web控制端),所以一般我們用它與SpringMVC來對比 而webFlux通過數據流和響應式編程使服務異步非阻塞

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章