1.個人了解
同步:一直等待得到結果。
異步:一個線程接受請求後 直接傳回 并不會得到結果 等後端處理完畢之後 在選擇一個線程傳回結果。
阻塞:等待着一個請求完成 挂起線程 沒完成的話下一個請求不執行
非阻塞:在一個請求執行時并且沒得到結果 不會阻塞改線程
1.springMvc
springMvc一般會部署在tomcat上,而tomcat一般會建立一個線程池,每發送一個請求,就會為請求綁定一個線程,對于每個線程是同步阻塞的。(也可以配置成異步 這樣會提升吞吐量) 當請求過多,線程池中線程消耗完畢之後,服務就會阻塞,這樣會大大影響,服務的效率,同時因為線程池也太過沉重,這樣就引出了webFlux。
2.springWebFlux
WebFlux隻是響應式程式設計中的一部分(在Web控制端),是以一般我們用它與SpringMVC來對比,而webFlux通過資料流和響應式程式設計使服務異步非阻塞。
2.同步、異步、阻塞、非阻塞解釋
老張愛喝茶,廢話不說,煮開水。
出場人物:老張,水壺兩把(普通水壺,簡稱水壺;會響的水壺,簡稱響水壺)。
1 老張把水壺放到火上,立等水開。(同步阻塞)
老張覺得自己有點傻
2 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。(同步非阻塞)
老張還是覺得自己有點傻,于是變高端了,買了把會響笛的那種水壺。水開之後,能大聲發出嘀~~~~的噪音。
3 老張把響水壺放到火上,立等水開。(異步阻塞)
老張覺得這樣傻等意義不大
4 老張把響水壺放到火上,去客廳看電視,水壺響之前不再去看它了,響了再去拿壺。(異步非阻塞)
老張覺得自己聰明了。
所謂同步異步,隻是對于水壺而言。
普通水壺,同步;響水壺,異步。
雖然都能幹活,但響水壺可以在自己完工之後,提示老張水開了。這是普通水壺所不能及的。
同步隻能讓調用者去輪詢自己(情況2中),造成老張效率的低下。
所謂阻塞非阻塞,僅僅對于老張而言。
立等的老張,阻塞;看電視的老張,非阻塞。
情況1和情況3中老張就是阻塞的,媳婦喊他都不知道。雖然3中響水壺是異步的,可對于立等的老張沒有太大的意義。是以一般異步是配合非阻塞使用的,這樣才能發揮異步的效用。