中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

NIO有哪些組成部分

發布時間:2022-01-07 09:22:48 來源:億速云 閱讀:151 作者:iii 欄目:服務器

這篇文章主要介紹“NIO有哪些組成部分”,在日常操作中,相信很多人在NIO有哪些組成部分問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”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()輪詢拿到已經就緒的事件。

到此,關于“NIO有哪些組成部分”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

nio
AI

旺苍县| 乌苏市| 浮梁县| 柳河县| 漠河县| 建昌县| 泸水县| 中西区| 合肥市| 武陟县| 津南区| 巴塘县| 新乡县| 湘乡市| 蒙山县| 罗山县| 沁阳市| 光泽县| 务川| 西峡县| 扬中市| 巴林左旗| 应用必备| 叙永县| 多伦县| 韶山市| 临洮县| 长丰县| 安庆市| 兴安县| 略阳县| 治多县| 沙湾县| 吴堡县| 普格县| 惠东县| 桃源县| 横峰县| 定陶县| 溧阳市| 河曲县|