<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                Netty 的使用一個包含 EventLoop 的 EventLoopGroup 為 Channel 的 I/O 和事件服務。EventLoop 創建并分配方式不同基于傳輸的實現。異步實現使用只有少數 EventLoop(和 Threads)共享于 Channel 之間 。這允許最小線程數服務多個 Channel,不需要為他們每個人都有一個專門的 Thread。 圖15.7顯示了如何使用 EventLoopGroup。 [![](https://github.com/waylau/essential-netty-in-action/raw/master/images/Figure%2015.7%20Thread%20allocation%20for%20nonblocking%20transports%20(such%20as%20NIO%20and%20AIO).jpg)](https://github.com/waylau/essential-netty-in-action/blob/master/images/Figure%2015.7%20Thread%20allocation%20for%20nonblocking%20transports%20(such%20as%20NIO%20and%20AIO).jpg) 1. 所有的 EventLoop 由 EventLoopGroup 分配。這里它將使用三個EventLoop 實例 2. 這個 EventLoop 處理所有分配給它管道的事件和任務。每個EventLoop 綁定到一個 Thread 3. 管道綁定到 EventLoop,所以所有操作總是被同一個線程在 Channel 的生命周期執行。一個管道屬于一個連接 Figure 15.7 Thread allocation for nonblocking transports (such as NIO and AIO) 如圖所述,使用有 3個 EventLoop (每個都有一個 Thread ) EventLoopGroup 。EventLoop (同時也是 Thread )直接當 EventLoopGroup 創建時分配。這樣保證資源是可以使用的 這三個 EventLoop 實例將會分配給每個新創建的 Channel。這是通過EventLoopGroup 實現,管理 EventLoop 實例。實際實現會照顧所有EventLoop 實例上均勻的創建 Channel (同樣是不同的 Thread)。 一旦 Channel 是分配給一個 EventLoop,它將使用這個 EventLoop 在它的生命周期里和同樣的線程。你可以,也應該,依靠這個,因為它可以確保你不需要擔心同步(包括線程安全、可見性和同步)在你 ChannelHandler實現。 但是這也會影響使用 ThreadLocal,例如,經常使用的應用程序。因為一個EventLoop 通常影響多個 Channel,ThreadLocal 將相同的 Channel 分配給 EventLoop。因此,它適合狀態跟蹤等等。它仍然可以用于共享重或昂貴的對象之間的 Channel ,不再需要保持狀態,因此它可以用于每個事件,而不需要依賴于先前 ThreadLocal 的狀態。 *EventLoop 和 Channel* *我們應該注意,在 Netty 4 , Channel 可能從 EventLoop 注銷稍后又從不同 EventLoop 注冊。這個功能是不贊成,因為它在實踐中沒有很好的工作* 語義跟其他傳輸略有不同,如 OIO(Old Blocking I/O)運輸,可以看到如圖14.8所示。 [![](https://github.com/waylau/essential-netty-in-action/raw/master/images/Figure%2015.8%20Thread%20allocation%20of%20blocking%20transports%20(such%20as%20OIO).jpg)](https://github.com/waylau/essential-netty-in-action/blob/master/images/Figure%2015.8%20Thread%20allocation%20of%20blocking%20transports%20(such%20as%20OIO).jpg) 1. 所有 EventLoop 從 EventLoopGroup 分配。每個新的 channel 將會獲得新的 EventLoop 2. EventLoop 分配給 channel 用于執行所有事件和任務 3. Channel 綁定到 EventLoop。一個 channel 屬于一個連接 Figure 15.8 Thread allocation of blocking transports (such as OIO) 你可能會注意到這里,一個 EventLoop (也是一個 Thread)創建每個 Channel。你可能被用來從開發網絡應用程序是基于常規阻塞I/O在使用java.io.* 包。但即使語義變化在這種情況下,有一件事仍然是相同的:每個 I/O 通道將由一次只有一個線程來處理,這是一個線程增強 Channel 的 EventLoop。可以依靠這個硬性的規則,使 Netty 的框架很容易與其他網絡框架進行比較。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看