色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

webflux的非阻塞

呂致盈2年前34瀏覽0評論

webflux的非阻塞?

題主應(yīng)該聽說過下面這些名詞:

- 阻塞IO

- 非阻塞IO

- 同步IO

- 異步IO

- 同步阻塞IO

- 同步非阻塞IO

- 異步阻塞IO

- 異步非阻塞IO

只要理解了這些,你就能理解webflux的非阻塞了!

IO

一個(gè)IO操作其實(shí)有兩個(gè)步驟:發(fā)起IO請求和實(shí)際的IO操作

阻塞IO和非阻塞IO的區(qū)別在于第一個(gè)步驟是否阻塞:發(fā)起IO請求是否會(huì)被阻塞,如果阻塞直到完成那么就是傳統(tǒng)的阻塞IO;如果不阻塞,那么就是非阻塞IO

同步IO和異步IO的區(qū)別就在于第二個(gè)步驟是否阻塞:如果實(shí)際的IO讀寫阻塞請求進(jìn)程,那么就是同步IO,因此阻塞IO、非阻塞IO、IO復(fù)用、信號驅(qū)動(dòng)IO都是同步IO;如果不阻塞,而是操作系統(tǒng)幫你做完IO操作再將結(jié)果返回給你,那么就是異步IO

舉個(gè)不太恰當(dāng)?shù)睦?:比如你家網(wǎng)絡(luò)斷了,你打電話去中國電信報(bào)修!

- 你撥號---客戶端連接服務(wù)器

- 電話通了---連接建立

- 你說:“我家網(wǎng)斷了,幫我修下”---發(fā)送消息

- 說完你就在那里等,那么就是阻塞IO

- 如果正好你有事,你放下電話,然后處理其他事情了,過一會(huì)你來問下,修好了沒---那就是非阻塞IO

- 如果客服說:“馬上幫你處理,你稍等”---同步IO

- 如果客服說:“馬上幫你處理,好了通知你”,然后掛了電話---異步IO

回到問題

SpringMVC5以前,一個(gè)請求過來后的流程大致是這樣的:

服務(wù)端接收到請求,從線程池獲取一個(gè)線程來處理

線程處理完成后,返回?cái)?shù)據(jù)

線程被釋放回線程池中

可以看到,當(dāng)一個(gè)請求過來后,所有的處理結(jié)束后才會(huì)得到響應(yīng)。

Webflux基于Reactor模型,一個(gè)主從Reactor模型如下圖:

主Reactor用于響應(yīng)連接請求,接收到請求后就分配一個(gè)channel,然后直接響應(yīng)客戶端

從Reactor用于處理IO操作請求,但是不處理具體邏輯

具體邏輯由工作線程去處理。工作線程處理完成后再去通知響應(yīng)。

java線程阻塞,webflux的非阻塞