日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Netty:我為啥這么受歡迎你們不知道嗎?

來源: 責編: 時間:2024-03-27 17:39:17 193觀看
導讀前言上文《Netty 編程看上去懵懵的...》通過比較 Java NIO 和 Netty 的工作流程,并結合 Netty 的源碼,可以更加清晰地理解Netty。本文將結合源碼詳細解析Netty的高效和強大功能的設計原理,學習 Netty 是如何實現其卓越的

前言

上文《Netty 編程看上去懵懵的...》通過比較 Java NIO 和 Netty 的工作流程,并結合 Netty 的源碼,可以更加清晰地理解Netty。本文將結合源碼詳細解析Netty的高效和強大功能的設計原理,學習 Netty 是如何實現其卓越的性能和功能特性,也希望可以在日后工作中利用到 Netty 的設計思想。cj428資訊網——每日最新資訊28at.com

Netty 解決的問題

我們先看看使用 Netty 在網絡編程中幫助我們解決了什么問題。cj428資訊網——每日最新資訊28at.com

簡化網絡編程

首先,基于 Netty 初次編碼的直觀體驗來講,開發者不用手動處理網絡通信細節,包括線程管理、I/O 處理、協議解析等,可以專注于業務邏輯的實現。也正是因為如此,在學習 Netty 時比較抽象難懂 。cj428資訊網——每日最新資訊28at.com

如下圖,可以看到 Java NIO 的代碼大概有 80 行,而且還沒有實現 HTTP 協議,并且還是單線程,沒有復雜的線程管理,更不用說性能什么的。cj428資訊網——每日最新資訊28at.com

而 Netty 實現的代碼只有 30 多行,其中的差別一目了然。cj428資訊網——每日最新資訊28at.com

圖片圖片cj428資訊網——每日最新資訊28at.com

粘包和拆包

我們一般說粘包和拆包都是說 TCP 協議的問題,因為當用戶消息通過 UDP 協議傳輸時,操作系統不會對消息進行拆分,所以發送出去的一條 UDP 報文就是完整的用戶消息,也就是每個 UDP 報文就是用戶消息的邊界。cj428資訊網——每日最新資訊28at.com

而當用戶消息通過 TCP 協議傳輸時,消息可能會被操作系統分組成多個的 TCP 報文進行傳輸,這個時候接收方收到多個報文后,由于不知道消息的邊界,也就無法讀出一個完整的消息。cj428資訊網——每日最新資訊28at.com

舉個例子,當發送方準備發送 「Hi」和「I am Erdan」這兩個消息,由于MTU限制、緩沖區的大小等條件,可能會出現幾種情況:cj428資訊網——每日最新資訊28at.com

第一種情況,兩條消息分到一個報文中,像這樣:cj428資訊網——每日最新資訊28at.com

圖片圖片cj428資訊網——每日最新資訊28at.com

第二種情況,「I am Erdan」中的部分消息隨「Hi」被分到一個報文中,像這樣:cj428資訊網——每日最新資訊28at.com

圖片圖片cj428資訊網——每日最新資訊28at.com

還可能會有第三、四...種情況。cj428資訊網——每日最新資訊28at.com

當接收方接收到第一種情況時我們稱之為粘包,第二種情況稱之為拆包。cj428資訊網——每日最新資訊28at.com

上面的種種情況表明,一個用戶消息不能對應一個 TCP 報文,正因為這樣,所以 TCP 是面向字節流的協議。cj428資訊網——每日最新資訊28at.com

粘包和拆包解決手段

解決粘包和拆包的根本手段就是找出消息的邊界,有幾種方式:cj428資訊網——每日最新資訊28at.com

  • 固定消息長度,這種方式靈活性不高,實際中很少用。
  • 特殊字符作為邊界,HTTP 是一個非常好的例子,通過設置回車符、換行符作為 HTTP 報文協議的邊界。
  • 自定義消息結構:消息頭消息體,可以自定義一個消息結構,由包頭和數據組成,其中包頭包是固定大小的,而且包頭里有一個字段來說明緊隨其后的數據有多大。

圖片圖片cj428資訊網——每日最新資訊28at.com

HTTP格式cj428資訊網——每日最新資訊28at.com

Netty的編解碼器

Netty 提供了固定長度解碼器(FixedLengthFrameDecoder)、行分隔符解碼器(LineBasedFrameDecoder)、分隔符解碼器(DelimiterBasedFrameDecoder)、基于長度字段的解碼器(LengthFieldBasedFrameDecoder)幾種方式來解決粘包問題,可以結合 Netty 的 ChannelPipeline 來使用。cj428資訊網——每日最新資訊28at.com

除此之外 Netty 也提供了 HTTP、WebSocket、TCP、UDP幾種協議的編解碼器,這也是 Netty 靈活擴展強大之處。cj428資訊網——每日最新資訊28at.com

高性能的設計

Netty 除了幫助開發人員解決了一些問題,還提高了網絡編程性能,體現如下cj428資訊網——每日最新資訊28at.com

多線程調度

在網絡編程中如果使用單線程來處理,即便是IO多路復用,吞吐和性能也是會有局限的。cj428資訊網——每日最新資訊28at.com

而 Netty 中通過 EventLoopGroup 管理線程池,每個線程就是一個 EventLoop。EventLoop 內部有一個 Selector 負責處理一個或多個 Channel 的注冊、讀寫和其他事件。cj428資訊網——每日最新資訊28at.com

所以 Netty 通過 EventLoopGroup、EventLoop 和 Selector 的配合工作,實現了高效的并發處理能力。cj428資訊網——每日最新資訊28at.com

圖片圖片cj428資訊網——每日最新資訊28at.com

線程安全保障

既然是多線程處理,肯定要去考慮線程安全以確保程序的正確性。cj428資訊網——每日最新資訊28at.com

Netty 是如何保障線程安全的?cj428資訊網——每日最新資訊28at.com

Netty 通過使用管道(ChannelPipeline)和處理器(ChannelHandler)的方式來實現數據的處理和流轉。而 ChannelHandler 會被分配給一個 EventLoop 處理, EventLoop 內部的數據結構和狀態都是線程封閉的,不會被其他線程訪問或修改。cj428資訊網——每日最新資訊28at.com

所以 Netty 通過合理地設計組件之間的關系,通過單線程執行、無鎖設計等方式保證了在高并發情況下的線程安全性。cj428資訊網——每日最新資訊28at.com

零拷貝

在傳統的網絡編程中,數據在進行網絡傳輸之前需要從應用層緩沖區復制到操作系統內核的緩沖區,然后再從內核的緩沖區復制到網絡設備的緩沖區。這種復制操作會增加 CPU 的負載和內存的開銷,如下圖cj428資訊網——每日最新資訊28at.com

圖片圖片cj428資訊網——每日最新資訊28at.com

而 Netty 利用零拷貝技術來減少數據復制的次數,提高了數據傳輸的效率。cj428資訊網——每日最新資訊28at.com

零拷貝將數據從內核空間直接傳輸到網絡適配器,避免了數據在內核空間和用戶空間之間的復制,從而減少了CPU的負擔。如下圖cj428資訊網——每日最新資訊28at.com

圖片圖片cj428資訊網——每日最新資訊28at.com

Netty的零拷貝體現在以下幾個方面:cj428資訊網——每日最新資訊28at.com

  • 零拷貝文件傳輸:Netty 的 FileRegion 接口提供了直接在文件系統和網絡之間傳輸數據的功能。通過使用零拷貝技術,數據可以直接從磁盤讀取并發送到網絡設備,避免了中間的緩沖區拷貝,提高了文件傳輸的性能。
  • 零拷貝內存傳輸:Netty 的 ByteBuf 類型支持零拷貝的內存傳輸。當數據在應用程序和內核之間傳輸時,Netty 使用直接內存緩沖區(Direct ByteBuffer)來避免額外的數據拷貝操作,提高了內存傳輸的效率。

通過以上方式,Netty 實現了零拷貝技術在網絡編程中的應用,提高了數據傳輸的效率和性能。這使得 Netty 在處理大量數據傳輸和高并發場景下具有更好的性能表現。cj428資訊網——每日最新資訊28at.com

總結

總的來說,Netty 不論在功能、性能以及穩定性來講都是一款很nice的網絡編程框架,很多知名的項目都將 Netty 作為其網絡通信的底層框架,比如Apache Kafka、Elasticsearch、gRPC、Dubbo等。熟悉這些框架的開發者通常都具備高并發開發經驗,并且掌握 Netty 是理解這些框架的重要基礎之一。cj428資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-79838-0.htmlNetty:我為啥這么受歡迎你們不知道嗎?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 野心、夢想與科幻——淺談外星殖民與軟件工程

下一篇: 如何使用Node.js和Web?3.0構建去中心化應用程序

標簽:
  • 熱門焦點
  • MIX Fold3包裝盒泄露 新機本月登場

    小米的全新折疊屏旗艦MIX Fold3將于本月發布,近日該機的真機包裝盒在網上泄露。從圖上來看,新的MIX Fold3包裝盒在外觀設計方面延續了之前的方案,變化不大,這也是目前小米旗艦
  • Mate60手機殼曝光 致敬自己的經典設計

    8月3日消息,今天下午博主數碼閑聊站帶來了華為Mate60的第三方手機殼圖,可以讓我們在真機發布之前看看這款華為全新旗艦的大致輪廓。從曝光的圖片看,Mate 60背后攝像頭面積依然
  • 一年經驗在二線城市面試后端的經驗分享

    忠告這篇文章只適合2年內工作經驗、甚至沒有工作經驗的朋友閱讀。如果你是2年以上工作經驗,請果斷劃走,對你沒啥幫助~主人公這篇文章內容來自 「升職加薪」星球星友 的投稿,坐
  • 從 Pulsar Client 的原理到它的監控面板

    背景前段時間業務團隊偶爾會碰到一些 Pulsar 使用的問題,比如消息阻塞不消費了、生產者消息發送緩慢等各種問題。雖然我們有個監控頁面可以根據 topic 維度查看他的發送狀態,
  • 多線程開發帶來的問題與解決方法

    使用多線程主要會帶來以下幾個問題:(一)線程安全問題  線程安全問題指的是在某一線程從開始訪問到結束訪問某一數據期間,該數據被其他的線程所修改,那么對于當前線程而言,該線程
  • 小米MIX Fold 3下月亮相:今年唯一無短板的全能折疊屏

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都有新的進展,其中榮耀、三星都已陸續發布了最新的折疊屏旗艦,尤其號榮耀Magi
  • 疑似小米14外觀設計圖曝光:后置相機模組變化不大

    下半年的大幕已經開啟,而誰將成為下半年手機圈的主角就成為了大家關注的焦點,其中被傳有望拿下新一代驍龍8 Gen3旗艦芯片的小米14系列更是備受大家矚
  • 華為Mate 60保護殼曝光:碩大后置相機模組 凸起程度有驚喜

    這段時間以來,關于華為新旗艦的爆料日漸密集。據此前多方爆料,今年華為將開始恢復一年雙旗艦戰略,除上半年推出的P60系列外,往年下半年的Mate系列也將
  • 蘋果MacBook Pro 2021測試:仍不支持平滑滾動

    據10月30日9to5 Mac 消息報道,蘋果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后獲得了不錯的評價,亮點包括行業領先的性能,令人印象深刻的電池續航,精美豐
Top 主站蜘蛛池模板: 烟台市| 吕梁市| 托里县| 葵青区| 商南县| 邯郸市| 昭苏县| 临湘市| 平遥县| 屏东市| 遂川县| 叶城县| 永新县| 西充县| 阳高县| 安化县| 哈密市| 晋城| 五常市| 汶上县| 尉犁县| 陇西县| 武安市| 米林县| 勃利县| 黑山县| 诸暨市| 文成县| 新巴尔虎右旗| 凤山县| 轮台县| 台前县| 灌阳县| 武义县| 大同县| 益阳市| 武威市| 惠来县| 牡丹江市| 和田县| 合江县|