NIO的組成有哪些——奈學
Buffer:與Channel進行互動,資料是從Channel讀入緩衝區,從緩衝區寫入Channel中的
flip方法 : 反轉此緩衝區,將position給limit,然後將position置為0,其實就是切換讀寫模式
clear方法 :清除此緩衝區,將position置為0,把capacity的值給limit。
rewind方法 : 重繞此緩衝區,將position置為0
DirectByteBuffer可減少一次系統空間到使用者空間的複製。但Buffer建立和銷燬的成本更高,不可控,通常會用記憶體池來提高效能。直接緩衝區主要分配給那些易受基礎系統的本機I/O 操作影響的大型、持久的緩衝區。如果資料量比較小的中小應用情況下,可以考慮使用heapBuffer,由JVM進行管理。
Channel:表示 IO 源與目標開啟的連線,是雙向的,但不能直接訪問資料,只能與Buffer 進行互動。透過原始碼可知,FileChannel的read方法和write方法都導致資料複製了兩次!
Selector可使一個單獨的執行緒管理多個Channel,open方法可建立Selector,register方法向多路複用器器註冊通道,可以監聽的事件型別:讀、寫、連線、accept。註冊事件後會產生一個SelectionKey:它表示SelectableChannel 和Selector 之間的註冊關係,wakeup方法:使尚未返回的第一個選擇操作立即返回,喚醒的
原因是:註冊了新的channel或者事件;channel關閉,取消註冊;優先順序更高的事件觸發(如定時器事件),希望及時處理。
Selector在Linux的實現類是EPollSelectorImpl,委託給EPollArrayWrapper實現,其中三個native方法是對epoll的封裝,而EPollSelectorImpl. implRegister方法,透過呼叫epoll_ctl向epoll例項中註冊事件,還將註冊的檔案描述符(fd)與SelectionKey的對應關係新增到fdToKey中,這個map維護了檔案描述符與SelectionKey的對映。
fdToKey有時會變得非常大,因為註冊到Selector上的Channel非常多(百萬連線);過期或失效的Channel沒有及時關閉。fdToKey總是序列讀取的,而讀取是在select方法中進行的,該方法是非執行緒安全的。
Pipe:兩個執行緒之間的單向資料連線,資料會被寫到sink通道,從source通道讀取
NIO的服務端建立過程:Selector.open():開啟一個Selector;ServerSocketChannel.open():建立服務端的Channel;bind():繫結到某個埠上。並配置非阻塞模式;register():註冊Channel和關注的事件到Selector上;select()輪詢拿到已經就緒的事件。
本文來自:奈學開發者社群,如有侵權,請聯絡我刪除~
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69976011/viewspace-2709652/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 奈學:資料湖有哪些缺點?
- 伺服器組成部分有哪些伺服器
- 奈學:資料湖和資料倉儲的區別有哪些?
- 大資料分析平臺的組成部分有哪些大資料
- 程式碼簽名證書組成部分有哪些
- 在Linux中,作業系統的主要組成部分有哪些?Linux作業系統
- HTTP響應報文有哪些組成部分?linux運維學習步驟有什麼HTTPLinux運維
- meta的屬性有哪些組成?說說它們的分別有什麼作用?
- 【知識分享】伺服器硬體部分有哪些組成伺服器
- 高中生需要養成的學習習慣有哪些
- 在K8S中,體系結構有哪些不同的組成部分?K8S
- 美顏sdk是什麼?美顏sdk有哪些技術組成?
- 伺服器由哪些部分組成伺服器
- CRM系統的功能模組有哪些
- 奈學:Executor框架的概述框架
- Nio再學習之NIO的buffer緩衝區
- Python中常用模組有哪些?Python
- python元組有哪些獲取元素的方法Python
- 學Python的好處有哪些Python
- 伺服器的硬體配置構成有哪些?伺服器
- 盲盒APP功能模組有哪些?APP
- python threading模組有哪些函式Pythonthread函式
- Python安裝模組有哪些方法?Python
- 模組化區塊鏈的有時包括哪些?區塊鏈
- 深度學習有哪些好玩的案例?深度學習
- Java NIO和NIO.2有什麼區別? | baeldungJava
- 奈飛經濟學
- Python中模組是什麼?Python有哪些模組?Python
- java類成員中的訪問級別有哪些Java
- 達成智慧數字經營的指標有哪些?指標
- 大資料平臺的整體架構由哪些組成大資料架構
- java的學習方法有哪些?Java學什麼?Java
- Python中常用的資料分析工具(模組)有哪些?Python
- Java NIO學習系列四:NIO和IO對比Java
- 學Python有哪些優勢Python
- 學習Linux最常用的命令有哪些?Linux
- 學習Web前端的好處有哪些?Web前端
- java BIO、NIO學習Java