无招胜有招之NIO
?
?
- 用戶空間和內核空間
Linux系統將自身劃分為兩部分,一部分為核心軟件,即是kernel,也稱作內核空間,另一部分為普通應用程序,這部分稱為用戶空間。
我比較喜歡的一種解釋話語:計算機硬件由運算器、控制器、存儲器、輸入輸出設備等設備組成,而能讓機箱中各種設備各司其職的東西叫做系統內核。內核負責驅動硬件,管理活動和分配管理硬件資源,所以它不能直接讓用戶操作。
因為用戶不能直接控制硬件,也不能直接操作內核,于是便需要基于“系統調用接口”開發出的程序服務來滿足用戶日常工作。
?
- BIO.NIO.AIO
BIO:同步阻塞式IO,服務器實現模式為一個連接一個線程,即客戶端有連接請求時服務器端就需要啟動一個線程進行處理,如果這個連接不做任何事情會造成不必要的線程開銷,當然可以通過線程池機制改善。?
BIO即阻塞I/O, 不管是磁盤I/O 還是網絡I/O, 數據在寫入OutputStream 或者從InputStream讀取時都有可能會阻塞,一旦有阻塞,線程將會失去CPU的使用權,這在當前的大規模訪問量和有性能要求的情況下是不能被接受的。
NIO:同步非阻塞式IO,服務器實現模式為一個請求一個線程,即客戶端發送的連接請求都會注冊到多路復用器上,多路復用器輪詢到連接有I/O請求時才啟動一個線程進行處理。?
AIO(NIO.2):異步非阻塞式IO,服務器實現模式為一個有效請求一個線程,客戶端的I/O請求都是由OS先完成了再通知服務器應用去啟動線程進行處理。?
【推薦】https://www.cnblogs.com/zedosu/p/6666984.html
?
- Channel和Seletor
Seletor就可以理解為選擇器
?
- 緩沖區
緩沖區(Buffer):一個用于特定基本數據類型的容器。由 java.nio 包定義的,所有緩沖區都是 Buffer 抽象類的子類。Java NIO 中的 Buffer 主要用于與 NIO 通道進行交互,數據是從通道讀入緩沖區,從緩沖區寫入通道中的。
緩沖區對象本質上是一個數組,但它其實是一個特殊的數組,緩沖區對象內置了一些機制,能夠跟蹤和記錄緩沖區的狀態變化情況,如果我們使用get()方法從緩沖區獲取數據或者使用put()方法把數據寫入緩沖區,都會引起緩沖區狀態的變化。它可以保存多個相同類型的數據。
?
【補充】
?
?
?
?
?
?
總結
- 上一篇: Spring的Java配置
- 下一篇: springboot环境搭建及入门必知