既然你能看到這,說明你已經有JAVA基礎了,不然咋回去面試
同步&異步, 阻塞&非阻塞 基本了解
-
同步(阻塞): 同步就是發起一個調用后,被調用者未處理完請求之前,調用不返回。
-
異步(非阻塞): 異步就是發起一個調用后,立刻得到被調用者的回應表示已接收到請求,但是被調用者並沒有返回結果,此時我們可以處理其他的請求,被調用者通常依靠事件,回調等機制來通知調用者其返回結果
BIO: (Blocking I/O) - 阻塞IO
也叫傳統IO
1) 先將文件內容從磁盤中拷貝到操作系統buffer
2) 再從操作系統buffer 拷貝到 程序應用(應用層)buffer
3) 從程序buffer拷貝到socket buffer
4) 從socket buffer拷貝到協議引擎.
傳統IO慢的原因是因為,數據搗騰過好幾遍,才走到socket中
NIO (New I/O) - 非阻塞IO
nio 是New IO 的簡稱,在jdk1.4 里提供的新api 。Sun 官方標榜的特性如下: 為所有的原始類型提供(Buffer)緩存支持。字符集編碼解碼解決方案。 Channel :一個新的原始I/O 抽象。 支持鎖和內存映射文件的文件訪問接口。 提供多路(non-bloking) 非阻塞式的高伸縮性網絡I/O
NIO不經過應用層的緩存,數據直接放在操作系統的緩存,應用層只是直接發送指令,讓操作系統Read buffer 直接寫到Socket Buffer .少了內核到應用層之間過渡。
AIO (Asynchronous I/O) - 異步IO
JDK1.7里面叫AIO, JDK1.5叫NIO,AIO才叫做異步IO,NIO其實並不是真正意義上的異步IO,NIO只是非阻塞IO。
AIO連系統緩存buffer都省了,在外層建立NMAP的映射,數據地址用一個內存地址,地址不需要倒騰復制。直接讀進來直接出去使用。
推薦學習資料:
netty權威指南 (會把NIO,AIO原理講下)
netty in action