乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      java開(kāi)發(fā)技術(shù)之Netty幾個(gè)核心類(lèi)介紹

       IT小白在線 2021-09-24

      ByteBuf

      JDK原生ByteBuffer的核心功能

      1. 字節(jié)緩沖區(qū),主要對(duì)字節(jié)進(jìn)行操作的一個(gè)類(lèi)

      2. 能夠?qū)⒕彌_區(qū)建立在堆內(nèi)和堆外。普通的new byte[] ,都只是建立在堆內(nèi)

      Netty之所以要自己封一套ByteBuf的主要原因是:

      1. 原生ByteBuffer 容量固定,一旦分配不能動(dòng)態(tài)擴(kuò)容和收縮。

      2. 原生ByteBuffer 的API使用不夠優(yōu)雅。稍有不慎,使用將會(huì)出錯(cuò)。它有3個(gè)核心指針,分別為position、 limit、capacity 。position : 位置,表示緩沖區(qū)中正在操作數(shù)據(jù)的位置。limit : 界限,表示緩沖區(qū)中可以操作數(shù)據(jù)的大小,(limit 后數(shù)據(jù)不能進(jìn)行讀寫(xiě)) capacity : 容量。讀寫(xiě)需要調(diào)用flip()、rewind()、clear()等方法來(lái)移動(dòng)相關(guān)指針 。

      ByteBuf 呢?它使用了核心的兩個(gè)位置指針來(lái)協(xié)助讀寫(xiě)操作,分別為readerIndex和writerIndex,數(shù)據(jù)讀取readerIndex會(huì)增加,數(shù)據(jù)寫(xiě)入writerIndex會(huì)增加,不需要增加額外的操作來(lái)移動(dòng)相關(guān)指針。此外 readerIndex 是不可能超過(guò) writerIndex。讀取過(guò) 的 0 ~ readerIndex 這部分空間是被視為棄用的,同時(shí)它可以進(jìn)行自動(dòng)擴(kuò)容。

      Channel

      Channel 是網(wǎng)絡(luò)操作抽象類(lèi),聚合了一組功能,提供了比原生Java SocketChannel、ServerSocketChannel大而全的功能接口,供業(yè)務(wù)開(kāi)發(fā)者使用,包括但不限于網(wǎng)絡(luò)的讀、寫(xiě)、發(fā)起連接、關(guān)閉連接、獲取通信雙方的地址。

      UnSafe

      Channel 的輔助操作類(lèi),操作底層網(wǎng)絡(luò)I/O,都是由它負(fù)責(zé)實(shí)現(xiàn)。

      ChannelPipeLine

      是Channel數(shù)據(jù)管道的一個(gè)抽象,消息在ChannelPipeLine中流動(dòng)和傳遞。它根據(jù)I/O事件的類(lèi)型,將消息傳遞給ChannelHandler進(jìn)行處理。同時(shí)對(duì)ChannelHandler鏈表進(jìn)行管理和調(diào)度。在讀取數(shù)據(jù)時(shí),ChannelHandler鏈表的調(diào)度順序是ch1,ch2,ch3,寫(xiě)數(shù)據(jù)時(shí)調(diào)度順序?yàn)閏h3,ch2,ch1。可以說(shuō)它是ChannelHandler的一個(gè)管理容器。

      ChannelHandler

      處理相應(yīng)I/O事件的通道消息處理器,比如,讀事件、寫(xiě)事件、讀完成事件、寫(xiě)完成事件等,Netty中眾多的編解碼器等都是實(shí)現(xiàn)自 ChannelHandler。

      ChannelHandlerContext

      通道處理器上下文,通過(guò)它來(lái)完成Channel 、ChannelPipeline、ChannelHandler這幾個(gè)組件之間的交互,采用知識(shí)最小化原則讓每個(gè)組件只關(guān)心ChannelHandlerContext相關(guān)API,。

      ok,我們來(lái)大致梳理一下關(guān)于通道的幾個(gè)核心類(lèi)關(guān)系。

      1. 每個(gè)Channel會(huì)綁定一個(gè)ChannelPipeline,ChannelPipeline中也會(huì)持有Channel的引用

      2. ChannelPipeline持有ChannelHandlerContext鏈路,保留ChannelHandlerContext的頭尾節(jié)點(diǎn)指針

      3. 每個(gè)ChannelHandlerContext會(huì)對(duì)應(yīng)一個(gè)ChannelHandler,也就相當(dāng)于ChannelPipeline持有ChannelHandler鏈路

      4. ChannelHandlerContext同時(shí)也會(huì)持有ChannelPipeline引用,也就相當(dāng)于持有Channel引用

      NioEventLoopGroup

      Netty遵循Reactor基礎(chǔ)線程模型的一個(gè)具體實(shí)現(xiàn)。以下是Reactor幾種基礎(chǔ)線程模型介紹。

      Reactor 單線程模型,所有的I/O操作都在同一個(gè)線程上完成。

      Reactor多線程模型,有一個(gè)用于專(zhuān)門(mén)接收客戶(hù)端TCP連接的NIO線程,網(wǎng)絡(luò)I/O 讀、寫(xiě)操作有專(zhuān)門(mén)一個(gè)NIO線程池處理。

      主從Reactor多線程模型,專(zhuān)門(mén)接收客戶(hù)端TCP連接的不在是一個(gè)線程,而是一個(gè)獨(dú)立的線程池(主),網(wǎng)絡(luò)I/O 讀、寫(xiě)操作仍然是專(zhuān)門(mén)一個(gè)NIO線程池處理(從)

      相關(guān)java培訓(xùn)開(kāi)發(fā)技術(shù)知識(shí),關(guān)注我,有更多精彩內(nèi)容與您分享!

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶(hù) 評(píng)論公約

        類(lèi)似文章 更多