小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

 IT小白在線 2021-09-24

ByteBuf

JDK原生ByteBuffer的核心功能

  1. 字節(jié)緩沖區(qū),主要對字節(jié)進行操作的一個類

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

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

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

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

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

Channel

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

UnSafe

Channel 的輔助操作類,操作底層網(wǎng)絡(luò)I/O,都是由它負責實現(xiàn)。

ChannelPipeLine

是Channel數(shù)據(jù)管道的一個抽象,消息在ChannelPipeLine中流動和傳遞。它根據(jù)I/O事件的類型,將消息傳遞給ChannelHandler進行處理。同時對ChannelHandler鏈表進行管理和調(diào)度。在讀取數(shù)據(jù)時,ChannelHandler鏈表的調(diào)度順序是ch1,ch2,ch3,寫數(shù)據(jù)時調(diào)度順序為ch3,ch2,ch1??梢哉f它是ChannelHandler的一個管理容器。

ChannelHandler

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

ChannelHandlerContext

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

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

  1. 每個Channel會綁定一個ChannelPipeline,ChannelPipeline中也會持有Channel的引用

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

  3. 每個ChannelHandlerContext會對應(yīng)一個ChannelHandler,也就相當于ChannelPipeline持有ChannelHandler鏈路

  4. ChannelHandlerContext同時也會持有ChannelPipeline引用,也就相當于持有Channel引用

NioEventLoopGroup

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

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

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

主從Reactor多線程模型,專門接收客戶端TCP連接的不在是一個線程,而是一個獨立的線程池(主),網(wǎng)絡(luò)I/O 讀、寫操作仍然是專門一個NIO線程池處理(從)

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

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多