新聞中心
在jdk6中有兩種IO:BIO和NIO,真正的AIO還沒(méi)有實(shí)現(xiàn).

我們提供的服務(wù)有:網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、武進(jìn)ssl等。為數(shù)千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢(xún)和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的武進(jìn)網(wǎng)站制作公司
IO操作在操作系統(tǒng)中可以需要分為兩步,第一步為等待操作系統(tǒng)的數(shù)據(jù)準(zhǔn)備,第二步是從內(nèi)核態(tài)的buffer到用戶(hù)態(tài)的buffer的拷貝,BIO是在第一步準(zhǔn)備狀態(tài)就等待,直到讀取數(shù)據(jù)返回,NIO則是在第一步的時(shí)候,如果沒(méi)有數(shù)據(jù)就直接返回,過(guò)一段時(shí)間再繼續(xù)請(qǐng)求,當(dāng)發(fā)現(xiàn)第一步的數(shù)據(jù)準(zhǔn)備好了,然后在第二步仍然等待.多路復(fù)用的NIO只是在第一步時(shí)候每一個(gè)操作都會(huì)注冊(cè)到多路復(fù)用器,這樣多路復(fù)用器進(jìn)行輪詢(xún),查看每一個(gè)的操作的數(shù)據(jù)有沒(méi)有準(zhǔn)備好,準(zhǔn)備好的通知這個(gè)操作讀取數(shù)據(jù),第二步還是需要等待的。
AIO則是第一步的時(shí)候操作請(qǐng)求后返回,直到第二步已經(jīng)完成,然后想辦法通知這個(gè)操作數(shù)據(jù)已經(jīng)準(zhǔn)備好 。
java web server對(duì)于jdk的IO的形式,出現(xiàn)了三種http請(qǐng)求的處理方式:
1.BIO處理方式 2.NIO處理方式 3.Async 處理方式
BIO處理方式
這種是最簡(jiǎn)單的處理方式,代碼也好編寫(xiě),基本上是一個(gè)連接一個(gè)線(xiàn)程模式,這樣在請(qǐng)求上來(lái)的時(shí)候,由于受限于服務(wù)器的內(nèi)存大小,cpu大小,線(xiàn)程數(shù)上限大小,是不能達(dá)到一個(gè)很高的并發(fā)數(shù)的,再者,這種模式的內(nèi)存和cpu都很高,對(duì)應(yīng)用來(lái)說(shuō)不是個(gè)好現(xiàn)象
NIO處理方式
NIO的最重要的地方是當(dāng)一個(gè)連接創(chuàng)建后,不需要對(duì)應(yīng)一個(gè)線(xiàn)程,這個(gè)連接會(huì)被注冊(cè)到多路復(fù)用器上面,所以所有的連接只需要一個(gè)線(xiàn)程就可以搞定,當(dāng)這個(gè)線(xiàn)程中的多路復(fù)用器進(jìn)行輪詢(xún)的時(shí)候,發(fā)現(xiàn)連接上有請(qǐng)求的話(huà),才開(kāi)啟一個(gè)線(xiàn)程進(jìn)行處理,也就是一個(gè)請(qǐng)求一個(gè)線(xiàn)程模式
Async 處理方式
在NIO的處理方式中,當(dāng)一個(gè)請(qǐng)求來(lái)的話(huà),開(kāi)啟線(xiàn)程進(jìn)行處理,可能會(huì)等待后端應(yīng)用的資源(JDBC連接等),其實(shí)這個(gè)線(xiàn)程就被阻塞了,當(dāng)并發(fā)上來(lái)的話(huà),還是會(huì)有BIO一樣的問(wèn)題
HTTP/1.1出現(xiàn)后,有了Http長(zhǎng)連接,這樣除了超時(shí)和指明特定關(guān)閉的http header外,這個(gè)鏈接是一直打開(kāi)的狀態(tài)的,
這樣在NIO處理中可以進(jìn)一步的進(jìn)化,在后端資源中可以實(shí)現(xiàn)資源池或者隊(duì)列,當(dāng)請(qǐng)求來(lái)的話(huà),開(kāi)啟的線(xiàn)程把請(qǐng)求和請(qǐng)求數(shù)據(jù)傳送給后端資源池或者隊(duì)列里面就返回,并且在全局的地方保持住這個(gè)現(xiàn)場(chǎng)(哪個(gè)連接的哪個(gè)請(qǐng)求等)。
這樣前面的線(xiàn)程還是可以去接受其他的請(qǐng)求,而后端的應(yīng)用的處理只需要執(zhí)行隊(duì)列里面的就可以了,這樣請(qǐng)求處理和后端應(yīng)用是異步的.當(dāng)后端處理完,到全局地方得到現(xiàn)場(chǎng),產(chǎn)生響應(yīng). 這個(gè)就實(shí)現(xiàn)了異步處理。
BIO就是一個(gè)連接一個(gè)線(xiàn)程
NIO就是一個(gè)請(qǐng)求一個(gè)線(xiàn)程
Async就是一個(gè)有效請(qǐng)求一個(gè)線(xiàn)程
希望通過(guò)本文的閱讀,能夠給你帶來(lái)幫助。
新聞名稱(chēng):談javawebserver與io形式
當(dāng)前地址:http://m.fisionsoft.com.cn/article/cdddghc.html


咨詢(xún)
建站咨詢(xún)
