這篇文章主要介紹“NIO有哪些組成部分”,在日常操作中,相信很多人在NIO有哪些組成部分問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”NIO有哪些組成部分”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

Buffer:與Channel進(jìn)行交互,數(shù)據(jù)是從Channel讀入緩沖區(qū),從緩沖區(qū)寫(xiě)入Channel中的
flip方法 : 反轉(zhuǎn)此緩沖區(qū),將position給limit,然后將position置為0,其實(shí)就是切換讀寫(xiě)模式
clear方法 :清除此緩沖區(qū),將position置為0,把capacity的值給limit。
rewind方法 : 重繞此緩沖區(qū),將position置為0
DirectByteBuffer可減少一次系統(tǒng)空間到用戶空間的拷貝。但Buffer創(chuàng)建和銷毀的成本更高,不可控,通常會(huì)用內(nèi)存池來(lái)提高性能。直接緩沖區(qū)主要分配給那些易受基礎(chǔ)系統(tǒng)的本機(jī)I/O 操作影響的大型、持久的緩沖區(qū)。如果數(shù)據(jù)量比較小的中小應(yīng)用情況下,可以考慮使用heapBuffer,由JVM進(jìn)行管理。
Channel:表示 IO 源與目標(biāo)打開(kāi)的連接,是雙向的,但不能直接訪問(wèn)數(shù)據(jù),只能與Buffer 進(jìn)行交互。通過(guò)源碼可知,F(xiàn)ileChannel的read方法和write方法都導(dǎo)致數(shù)據(jù)復(fù)制了兩次!
Selector可使一個(gè)單獨(dú)的線程管理多個(gè)Channel,open方法可創(chuàng)建Selector,register方法向多路復(fù)用器器注冊(cè)通道,可以監(jiān)聽(tīng)的事件類型:讀、寫(xiě)、連接、accept。注冊(cè)事件后會(huì)產(chǎn)生一個(gè)SelectionKey:它表示SelectableChannel 和Selector 之間的注冊(cè)關(guān)系,wakeup方法:使尚未返回的第一個(gè)選擇操作立即返回,喚醒的
原因是:注冊(cè)了新的channel或者事件;channel關(guān)閉,取消注冊(cè);優(yōu)先級(jí)更高的事件觸發(fā)(如定時(shí)器事件),希望及時(shí)處理。
Selector在Linux的實(shí)現(xiàn)類是EPollSelectorImpl,委托給EPollArrayWrapper實(shí)現(xiàn),其中三個(gè)native方法是對(duì)epoll的封裝,而EPollSelectorImpl. implRegister方法,通過(guò)調(diào)用epoll_ctl向epoll實(shí)例中注冊(cè)事件,還將注冊(cè)的文件描述符(fd)與SelectionKey的對(duì)應(yīng)關(guān)系添加到fdToKey中,這個(gè)map維護(hù)了文件描述符與SelectionKey的映射。
fdToKey有時(shí)會(huì)變得非常大,因?yàn)樽?cè)到Selector上的Channel非常多(百萬(wàn)連接);過(guò)期或失效的Channel沒(méi)有及時(shí)關(guān)閉。fdToKey總是串行讀取的,而讀取是在select方法中進(jìn)行的,該方法是非線程安全的。
Pipe:兩個(gè)線程之間的單向數(shù)據(jù)連接,數(shù)據(jù)會(huì)被寫(xiě)到sink通道,從source通道讀取
NIO的服務(wù)端建立過(guò)程:Selector.open():打開(kāi)一個(gè)Selector;ServerSocketChannel.open():創(chuàng)建服務(wù)端的Channel;bind():綁定到某個(gè)端口上。并配置非阻塞模式;register():注冊(cè)Channel和關(guān)注的事件到Selector上;select()輪詢拿到已經(jīng)就緒的事件。
到此,關(guān)于“NIO有哪些組成部分”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
當(dāng)前題目:NIO有哪些組成部分-創(chuàng)新互聯(lián)
瀏覽路徑:http://chinadenli.net/article6/dhchig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、外貿(mào)建站、服務(wù)器托管、定制網(wǎng)站、網(wǎng)站維護(hù)、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容