版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1.BIO、NIO AIO I/O 請求時才啟動一個線程進行處理。 Stream NIO channel 1.BIO、NIO AIO I/O 請求時才啟動一個線程進行處理。 Stream NIO channel 0、基于block 的傳輸比基于流的傳輸更高效、更高級的IO zero-copy、IO 多路復用大大Java Reactor 線程模型。 Reactor 中實現(xiàn)讀:2.NIO BufferChannelChannel Channel flipclear ition0capacitylimit。 ition 0rewind DirectByteBufferBuffer創(chuàng)建和銷毀的成本更高
2、,I/O heapBufferJVM 進行管理。 行交互。通過源碼可知,F(xiàn)ileChannelread write SelectorChannel,open Selector,register SelectionKeySelectableChannel Selector 關(guān)系,wakeup 了新的 channel channel Selector Linux EPollSelectorImplEPollArrayWrapper nativeepoll EPollSelectorImpl. implRegister epoll_ctl epoll 實例中 SelectionKey。 Select
3、orChannel 非常多(百萬連接 select Pipesinksource Selector上;select()3.Nettynativeepoll EPollSelectorImpl. implRegister epoll_ctl epoll 實例中 SelectionKey。 SelectorChannel 非常多(百萬連接 select Pipesinksource Selector上;select()3.NettyNIOTCP、UDP socketepollcpu占用飆升在NIO NIO 的處理方式。decoder/encoder TCP 粘包/可使用接受/IO線程數(shù)、TCP T
4、CP 接收和發(fā)送緩沖區(qū)使用直接內(nèi)存代替堆內(nèi)存,通過內(nèi)存ByteBufGC ReactorvolitaleCAS4.NettyNetty通過Reactor,s線和worksacceptsocketNioSocketChannel work work readwrite Handler 單線程模型:所有 I/O 或應答/響應消息。一個NIO NIO 線程(Acceptor)TCP 求;NIO線 負責網(wǎng)絡 IO 的操作,即消息的 、 、編碼和發(fā)送;1 NIO 線程可N 1 1 NIO 線程,這是為了防止發(fā)生并發(fā)操作Acceptor 主從多線程模型:Acceptor Reactor Sub I/O m
5、ainReactor 5.TCP 粘包/TCP粘包/MSSTCPTCP 報文長度-TCP頭部長度MSS的時候?qū)l(fā)生拆包I/O mainReactor 5.TCP 粘包/TCP粘包/MSSTCPTCP 報文長度-TCP頭部長度MSS的時候?qū)l(fā)生拆包payload(凈荷)MTU(1500 字節(jié))ip 分片。 包尾增加特殊字符分割: 行分隔符類: LineBasedFrameDecoder 或自定義分隔符類 : 序列化(編碼)是將對象序列化為二進制形式(字節(jié)數(shù)組資源占用(異構(gòu)系統(tǒng)的對接和開發(fā)語言切換JavaJSONXML 可替代:跨Web browser Ajax 請求、傳輸數(shù)據(jù)量相對小,實時性要求
6、相對低(例如秒級別) json 庫。缺點:過于注重快,而偏離了“標準”及功能性、代碼質(zhì)量不高,文檔不全。適用場景:協(xié)議交互、Web 輸出、Android 客戶端ThriftRPC 框架。優(yōu)點:序列化后的體積小, HTTPRPC 解決方案Avro,HadoopJSON于Hadoop gMapReduce ProtobufThriftRPC 框架。優(yōu)點:序列化后的體積小, HTTPRPC 解決方案Avro,HadoopJSON于Hadoop gMapReduce Protobuf,將數(shù)據(jù)結(jié)構(gòu)以.proto 文件進行描述,通過代碼生成工具可以生成對應數(shù)據(jù)結(jié)構(gòu)的 POJOProtobuf相關(guān)的方法和屬
7、性。優(yōu)點:序列化后碼流小,性能高、結(jié)構(gòu)化數(shù)據(jù)存 容易管理缺點需要依賴于工具生成代碼支持的語言相對較Java C+ 的protostuff protobufprotosmarshaling java 類, 無須實java.io.Serializable JMessagepack Hessian remotingonhttp i(Output100msXMLSOAP協(xié)議是一WebbrowserAjaxMobileapp與服務端之間的通訊,JSON協(xié)議是首選。對于 當對性能和簡潔性有極高要求的場景,Protobuf,Thrift,Avro 之間具有一定的競爭關(guān)系。T 級別的數(shù)據(jù)的持久化應用場景,Pr
8、otobuf Avro hadoop子項目里,Avro Hadoop項目,以靜態(tài)類型語言為主的應用場景,Protobuf Avro 應用場景,AvroRPC解決方案,Thrift是一個好的選擇。如果序列化之后需要支持不同的傳輸層協(xié)議,或者需要跨 Protobuf 可以優(yōu)先考慮。的高性能場景, : RPC解決方案,Thrift是一個好的選擇。如果序列化之后需要支持不同的傳輸層協(xié)議,或者需要跨 Protobuf 可以優(yōu)先考慮。的高性能場景, : ,16,2047 protobuf required字段,optional repeated required編譯器為每一個消息類型生成了一個.javaB
9、uilder 類(建消息類接口的) 。 如:=Netty 中的使用:32FrameDecoder 是用于處理半包消息類;類32LengthFieldPrepender 對protobuf 協(xié)議的消息頭上加上一個長度為的整形字段,用于標志這個消息的長度的類;ProtobufEncoder StringBuilderByteBuf類型:copiedBuffer()8.Netty 一份到直接內(nèi)存中才寫入 Socket ByteBuffer 由 ChannelConfig 分配ChannelConfigByteBufAllocator Direct BufferiteByteBuf 類可以將多個 By
10、teBuf 合并為一個邏輯上的 ByteBuf, Buffer。ponents header body ByteBuf, ByteBuf 在的, iteByteBuf FileRegion FileChannel.tranferTo, 可以直接將文件緩沖區(qū)的數(shù)據(jù)發(fā)送到目標 Channelwrite 方式導致的內(nèi)存拷貝問題。wrap 方法byte 數(shù)組、ByteBuf、ByteBufferNetty對象, Selector BUGSelector wakeup CPU 一次計數(shù)若在某個周期內(nèi)連續(xù)發(fā)生 N 次空對象, Selector BUGSelector wakeup CPU 一次計數(shù)若在某個
11、周期內(nèi)連續(xù)發(fā)生 N 次空輪詢則觸發(fā)了 epoll 死循環(huán) bug重建 Selector,SocketChannel Selector SelectorSelector 9.Netty是否重來,檢測網(wǎng)絡延遲,其中idleSeHandler 類 用來檢測會話狀態(tài) NIO 局部無鎖化的串行線程設(shè)計相比一個隊列-可靠性,鏈路有效性檢測:鏈路空閑檢測機制,讀/ByteBuf;ByteBuf Netty 安全性:支持的安全協(xié)議:SSL V2 (主從多線程 (AIO(Http流量整型的作用(變壓器 NioEventLoopGroup( 其 實 是 MultithreadEventExecutEventExe
12、cutor children , 默認大小是處理器核數(shù) * 2, 這樣就一個類型為EventExecutor NioEventLoopGroup newChild children 線程啟動時調(diào)用SingleThreadEventExecutor的構(gòu)造方法,執(zhí)行NioEventLoop類的run 方法,首先會調(diào)用hasTasks()方法判斷當前taskQueue 是否有元素。如果taskQueue 中有元素,執(zhí)行 selectNow() 方法,最終執(zhí)行 selector.selectNow(),該方立即返回。如果 taskQueue沒有元素,執(zhí)行 select(oldWakenUp) 方法se
13、lect ( oldWakenUp) Nio t 線程啟動時調(diào)用SingleThreadEventExecutor的構(gòu)造方法,執(zhí)行NioEventLoop類的run 方法,首先會調(diào)用hasTasks()方法判斷當前taskQueue 是否有元素。如果taskQueue 中有元素,執(zhí)行 selectNow() 方法,最終執(zhí)行 selector.selectNow(),該方立即返回。如果 taskQueue沒有元素,執(zhí)行 select(oldWakenUp) 方法select ( oldWakenUp) Nio t 行 t t 達到閾值(512 rebuildSelectoropenSelecto
14、r selectorold selector selectionKeycanceloldselectorchannel ectedKeys 方法(I/O 任務selectedKeys != null ectedKeysOptimized selectedKeys IO selectkey ectedKey 來處理它,放在數(shù)組 selectedKeys 中, 然后為每個事件都調(diào)用 ectedKey OP_READ;OP_WRITE;OP_CONNECTrunAllTasks 方法(IO 任務fetchFromScheduledTaskQueuescheduledTaskQueue中已經(jīng)超過延遲執(zhí)行時間的任務移到taskQueue中等待被執(zhí)行,taskQueue 64 個任務,進行耗時
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江西省南昌市2025-2026學年上學期期末八年級數(shù)學試卷(含答案)
- 文綜試卷及答案
- 微積分試題及答案
- 地產(chǎn)委托物業(yè)前期介入相關(guān)工作作業(yè)指導書
- 腹腔鏡培訓班理論考試試題
- 達人介紹教學
- 一年級數(shù)學上冊期中試卷及答案真題(三套)
- 解析卷-滬粵版八年級物理上冊第四章物質(zhì)的形態(tài)及其變化章節(jié)測評試卷(含答案詳解版)
- 大壩混凝土施工技術(shù)操作要領(lǐng)
- 2026屆北京市石景山區(qū)高三上學期期末考試歷史試題(含答案)
- DB50∕T 1604-2024 地質(zhì)災害防治邊坡工程結(jié)構(gòu)可靠性設(shè)計規(guī)范
- 非現(xiàn)場執(zhí)法培訓課件
- 中國電氣裝備資產(chǎn)管理有限公司招聘筆試題庫2025
- 糖尿病足的護理常規(guī)講課件
- 2025年高考英語復習難題速遞之語法填空(2025年4月)
- 2025外籍工作人員勞動合同范本
- 退化林地生態(tài)修復-深度研究
- 湖北省武漢市江岸區(qū)2024-2025學年九年級上學期期末數(shù)學試題(原卷版+解析版)
- 2025年《新課程標準解讀》標準課件
- 2024-2025學年同步試題 語文(統(tǒng)編版選擇性必修中冊)8.2小二黑結(jié)婚
- 2024年1月國家開放大學漢語言本科《古代小說戲曲專題》期末紙質(zhì)考試試題及答案
評論
0/150
提交評論