千鋒教育-做有(you)情(qing)懷、有(you)良心、有(you)品(pin)質的職業教育機構
同步阻塞IO(JAVA BIO/Blocking IO ): 同步并(bing)阻塞,服務器實現模式(shi)為一(yi)個連接(jie)一(yi)個線程,即(ji)客(ke)戶端有連接(jie)請求(qiu)時服務器端就(jiu)需要(yao)啟(qi)動(dong)一(yi)個線程進行處理,如果這個連接(jie)不做任(ren)何事情會造成不必(bi)要(yao)的線程開銷.
Java NIO(Non-Blocking IO ) : 同(tong)步(bu)非阻(zu)塞,服務器實現模式為(wei)一(yi)個請求(qiu)(qiu)一(yi)個線(xian)程,即客戶端發(fa)送的連接請求(qiu)(qiu)都會注冊到多(duo)路(lu)復用器上,多(duo)路(lu)復用器輪(lun)詢到連接有I/O請求(qiu)(qiu)時才啟動一(yi)個線(xian)程進行處理。
NIO的優點在于(yu)首先(xian)基于(yu)緩存(cun)讀寫(xie)文件,能夠批量操作,然后用channel雙(shuang)向讀寫(xie)數據,減少每(mei)次(ci)打開斷開流的資源消耗(hao)。
引入selecore的概念,用一個線(xian)程(cheng)管(guan)理多(duo)個通(tong)道,大大減少線(xian)程(cheng)開銷。
Java AIO(NIO.2) : 異(yi)步非阻塞,服務(wu)器(qi)實現模式為一個有效(xiao)請(qing)求(qiu)(qiu)一個線(xian)(xian)程,客戶端的I/O請(qing)求(qiu)(qiu)都是由OS先完成(cheng)了再通(tong)知服務(wu)器(qi)應(ying)用(yong)去啟動線(xian)(xian)程進(jin)行處理(li),NIO方式適(shi)用(yong)于連(lian)接數目多(duo)且連(lian)接比較短(輕操作)的架構,比如聊天服務(wu)器(qi),并發局限于應(ying)用(yong)中,編程比較復雜,JDK1.4開始支持(chi)。
AIO方(fang)式使(shi)用于連(lian)接數目(mu)多且連(lian)接比(bi)較長(重操(cao)作(zuo)(zuo))的架構,比(bi)如相冊服務器,充(chong)分(fen)調用OS參(can)與并發操(cao)作(zuo)(zuo),編程比(bi)較復(fu)雜,JDK7開始支持(chi)I/O屬于底層(ceng)操(cao)作(zuo)(zuo),需要操(cao)作(zuo)(zuo)系統支持(chi),并發也(ye)需要操(cao)作(zuo)(zuo)系統的支持(chi),所以性能方(fang)面不(bu)同操(cao)作(zuo)(zuo)系統差(cha)異會比(bi)較明顯。
另外(wai)NIO的非阻塞,需要(yao)一直輪詢(xun),也是一個比較耗資源的。所以出現AIO
上一篇
threadlocal原理下一篇
單利模式是什么,線程安全嗎?相關推薦