<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Netty是個啥?簡單來說就這!

          共 2658字,需瀏覽 6分鐘

           ·

          2020-08-05 23:59

          ? ? ?

          ? ?正文? ?


          Netty是什么

          Netty 是一款異步事件驅(qū)動網(wǎng)絡(luò)應(yīng)用程序框架,支持快速地開發(fā)可維護的高性能的面向協(xié)議的服務(wù)器和客戶端。

          異步和同步

          同步(Sync):所謂同步,就是線程發(fā)出一個功能調(diào)用時,在沒有得到結(jié)果之前,該調(diào)用就不返回或繼續(xù)執(zhí)行后續(xù)操作,而是等待可以調(diào)用。當可以調(diào)用之后,線程自行進行調(diào)用。

          異步(Async):異步與同步相對,當一個異步過程調(diào)用發(fā)出后,調(diào)用者在沒有得到結(jié)果之前,就可以繼續(xù)執(zhí)行后續(xù)操作。當這個調(diào)用完成后,一般通過狀態(tài)、通知和回調(diào)來通知調(diào)用者。對于異步調(diào)用,調(diào)用的返回并不受調(diào)用者控制。

          總結(jié)來說,同步和異步的區(qū)別大概有兩個:

          • 請求發(fā)出后,是否可以返回執(zhí)行其他操作。
          • 當可以進行調(diào)用時,同步情況是發(fā)起調(diào)用的線程自己去調(diào)用并得到結(jié)果,異步情況是內(nèi)核將調(diào)用動作完成,將結(jié)果返回給調(diào)用線程。

          事件驅(qū)動

          一個典型的事件驅(qū)動的程序,就是一個死循環(huán),并以一個線程的形式存在,這個死循環(huán)包括兩個部分,第一個部分是按照一定的條件接收并選擇一個要處理的事件,第二個部分就是事件的處理過程。程序的執(zhí)行過程就是選擇事件和處理事件,而當沒有任何事件觸發(fā)時,程序會因查詢事件隊列失敗而進入睡眠狀態(tài),從而釋放cpu。

          也就是說,事件驅(qū)動就是有事件就處理,沒時間就等待。

          BIO、NIO和AIO的區(qū)別


          事件分離器

          在IO讀寫時,把 IO請求 與 讀寫操作 分離調(diào)配進行,需要用到事件分離器。根據(jù)處理機制的不同,事件分離器又分為:同步的Reactor和異步的Proactor。

          Reactor模型:

          • 應(yīng)用程序在事件分離器注冊 讀就緒事件 和 讀就緒事件處理器
          • 事件分離器等待讀就緒事件發(fā)生
          • 讀就緒事件發(fā)生,激活事件分離器,分離器調(diào)用 讀就緒事件處理器(即:可以進行讀操作了,開始讀)
          • 讀事件處理器開始進行讀操作,把讀到的數(shù)據(jù)提供給程序使用

          Proactor模型:

          • 應(yīng)用程序在事件分離器注冊 讀完成事件 和讀完成事件處理器,并向操作系統(tǒng)發(fā)出異步讀請求
          • 事件分離器等待操作系統(tǒng)完成讀取
          • 在分離器等待過程中,操作系統(tǒng)利用并行的內(nèi)核線程執(zhí)行實際的讀操作,并將結(jié)果數(shù)據(jù)存入用戶自定義緩沖區(qū),最后通知事件分離器讀操作完成
          • 事件分離器監(jiān)聽到 讀完成事件 后,激活 讀完成事件的處理器
          • 讀完成事件處理器 處理用戶自定義緩沖區(qū)中的數(shù)據(jù)給應(yīng)用程序使用

          同步和異步的區(qū)別就在于??操作由誰完成:同步的Reactor是指程序發(fā)出讀請求后,由分離器監(jiān)聽到可以進行讀操作時(需要獲得讀操作條件)通知事件處理器進行讀操作,異步的Proactor是指程序發(fā)出讀請求后,操作系統(tǒng)立刻異步地進行讀操作了,讀完之后在通知分離器,分離器激活處理器直接取用已讀到的數(shù)據(jù)。

          同步阻塞IO(BIO):在此種方式下,用戶進程在發(fā)起一個IO操作以后,必須等待IO操作的完成,只有當真正完成了IO操作以后,用戶進程才能運行。JAVA傳統(tǒng)的IO模型屬于此種方式!

          同步非阻塞IO(NIO):在此種方式下,用戶進程發(fā)起一個IO操作以后邊可返回做其它事情,但是用戶進程需要時不時的詢問IO操作是否就緒,這就要求用戶進程不停的去詢問,從而引入不必要的CPU資源浪費。其中目前JAVA的NIO就屬于同步非阻塞IO。

          異步阻塞IO(AIO):此種方式下是指應(yīng)用發(fā)起一個IO操作以后,不等待內(nèi)核IO操作的完成,等內(nèi)核完成IO操作以后會通知應(yīng)用程序,這其實就是同步和異步最關(guān)鍵的區(qū)別,同步必須等待或者主動的去詢問IO是否完成,那么為什么說是阻塞的呢?因為此時是通過select系統(tǒng)調(diào)用來完成的,而select函數(shù)本身的實現(xiàn)方式是阻塞的,而采用select函數(shù)有個好處就是它可以同時監(jiān)聽多個文件句柄,從而提高系統(tǒng)的并發(fā)性!

          異步非阻塞IO:在此種模式下,用戶進程只需要發(fā)起一個IO操作然后立即返回,等IO操作真正的完成以后,應(yīng)用程序會得到IO操作完成的通知,此時用戶進程只需要對數(shù)據(jù)進行處理就好了,不需要進行實際的IO讀寫操作,因為真正的IO讀取或者寫入操作已經(jīng)由內(nèi)核完成了。目前Java中還沒有支持此種IO模型。

          Netty相關(guān)概念和基本架構(gòu)

          Netty的核心組件包括以下幾個部分:

          • BootStrap和ServerBootstrap BootStrap通常稱為引導(dǎo)類,提供一個用于應(yīng)用程序網(wǎng)絡(luò)層配置的容器。
          • Channel 底層網(wǎng)路傳輸API必須提供給應(yīng)用I/O操作的接口,如讀、寫、連接、綁定等。它結(jié)構(gòu)類似一個“Socket”。它有很多類似于socket的函數(shù):bind、close、config、connect、isActive、isOpen、isWritable、read、write等等。
          • ChannelHandler Handle稱之為處理器,支持很多協(xié)議,提供用于數(shù)據(jù)處理的容器。常用的一個接口是ChannelInboundHandler,這個類型可以處理入站事件(即外部應(yīng)用連接到本應(yīng)用的事件);反之有ChannelOutboundHandler接口,處理出站事件。業(yè)務(wù)邏輯經(jīng)常在一個或多個ChannelInboundHandler中操作。
          • ChannelPipeline Netty的數(shù)據(jù)處理流程其實是一種責(zé)任鏈和攔截過濾器模式,ChannelPipeline 提供了一個鏈容器,該鏈包含一個或多個ChannelHandler ,并提供了一個API用于管理沿著鏈入站和出站事件的流動。
          • EventLoop EventLoop 用于處理 Channel 的 I/O操作。一個EventLoop可以處理多個Channel事件。而EventLoopGroup是一個Group,可以包括多個EventLoop。
          • ChannelFuture Netty是一種異步I/O模型,一個操作可能無法立即返回結(jié)果,所以它提供了ChannelFuture類,可以通過addListener添加監(jiān)聽器,操作完成時可以作出通知。

          Netty的基本架構(gòu)如下圖所示:



          源:https://www.zybuluo.com/adamhand/note/1374690

          版權(quán)申明:內(nèi)容來源網(wǎng)絡(luò),版權(quán)歸原創(chuàng)者所有。除非無法確認,我們都會標明作者及出處,如有侵權(quán)煩請告知,我們會立即刪除并表示歉意。謝謝!



          感謝閱讀



          瀏覽 48
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91视频久久久久久久久久 | 欧美三级片网站 | 国产一区在线观看视频 | A V性天堂网 | 欧美日韩小视频 |