java io 模型重點講述
bio(阻塞)
同步IO 接受請求與處理請求用同一條線程
aio
應用程序線程會向系統註冊一個socket請求,以及一個回調方法,繼續執行下去。socket接受區的數據監控交給系統,當數據到達接收區,系統就將接收區的數據讀到應用程序的緩衝區中,再回調用註冊的方法去讀取數據。
nio (異步非阻塞)
與aio類似,不同之此在於,aio回調完成事件時,數據已經複製到應該用程序中了(jvm),而noi還需要通過API去系統的接收區中讀。接收緩衝區的選用很重要。
緩衝區類型主要有三種:jvm,jvm外,文件映射(mappedbytebuffer)。noi主要選擇還是jvm外的緩衝區。
一個好緩衝區的影響性能的因素有:同時讀寫,動態擴容大小。
它決定了異步通訊的穩定性和高效率性。nio的一個實現框架是netty,他設計了一套接口bytesbuf,compositebytebuf實現類,可以按需求去實現自己的bytesbuf實現類。