鍍金池/ 問(wèn)答/Java  Linux/ 怎么理解"Tomcat NIO方式適用于連接數(shù)目多且連接比較短的連接,

怎么理解"Tomcat NIO方式適用于連接數(shù)目多且連接比較短的連接,AIO方式使用于連接數(shù)目多且連接比較長(zhǎng)的連接"?

NIO方式適用于連接數(shù)目多且連接比較短(輕操作)的架構(gòu),比如聊天服務(wù)器,并發(fā)局限于應(yīng)用中

AIO方式使用于連接數(shù)目多且連接比較長(zhǎng)(重操作)的架構(gòu),比如相冊(cè)服務(wù)器,充分調(diào)用OS參與并發(fā)操作


這兩段話如何理解?

回答
編輯回答
葬憶

NIO是同步的,它需要tomcat去輪詢。連接多且短的時(shí)候,輪詢效率較高,但如果大多數(shù)連接耗時(shí)都比較長(zhǎng),則會(huì)增加輪詢開(kāi)銷,空耗很多cpu周期。

AIO是異步的,無(wú)需輪詢,但需要操作系統(tǒng)參與,因此如果連接多而短,就會(huì)在內(nèi)核和用戶態(tài)之間頻繁切換,性能反而不如輪詢。

做個(gè)比喻。你做實(shí)驗(yàn)需要取各種材料和器材。如果東西很多并且取一次需要花費(fèi)的時(shí)間比較長(zhǎng)(倉(cāng)庫(kù)在樓下甚至在實(shí)驗(yàn)室外面),這時(shí)候你肯定選擇讓你的助手幫你取。這個(gè)助手就類似于AIO中操作系統(tǒng)的角色。

但是如果東西同樣很多,但就在旁邊的架子上并且分門別類地放好了,很容易取到,這時(shí)候你雖然還是可以讓助手幫你取,但很有可能還不如你自己取方便,尤其是東西的名字很長(zhǎng)很拗口,與助手溝通都需要花費(fèi)不少時(shí)間的情況下(類比用戶態(tài)與系統(tǒng)態(tài)切換的開(kāi)銷大這一事實(shí))

2017年4月8日 07:13