云自無心水自閑

          天平山上白云泉,云自無心水自閑。何必奔沖山下去,更添波浪向人間!
          posts - 288, comments - 524, trackbacks - 0, articles - 6
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          Netty insight

          Posted on 2014-11-21 14:18 云自無心水自閑 閱讀(529) 評論(0)  編輯  收藏
          Netty
          1. there're 2 EventLoopGroup in netty, bossGroup and workerGroup, (1 implementation NioEventLoopGroup is a kind of thread pool)
          2. bossGroup is Acceptor,is responsible for creating Channels for incoming connection requests
          3. workerGroup is the Reactor/Selector?, handling I/O requests. 
          4. a thread in bossGroup will be listening in the port, Once a connection has been accepted workerGroup assigns an EventLoop to its Channel
          5. multiple channels can be registered into 1 EventLoop, multiple EventLoops will exist in workerGroup
          6. workerGroup will iterate all the EventLoop, and iterate all the channels in EventLoop, if any of the channel is ready to execute/process
          7. it will invoke all the channelHandlers in the channelPipeline
          8. ChannelPipelines are containers for chains of ChannelHandlers which executed in order
          9. There are, in fact, two ways of sending messages in Netty. You can write directly to the Channel or write to the ChannelHandlerContext object. The main difference is that the former approach causes the message to start from the tail of the ChannelPipeline, while the latter causes the message to start from the next handler in the ChannelPipeline.
          10. While the I/O thread must not be blocked at all, thus prohibiting any direct blocking operations within your ChannelHandler, there is a way to implement this requirement.
          You can specify an EventExecutorGroup when adding ChannelHandlers to the ChannelPipeline.
          This EventExecutorGroup will then be used to obtain an EventExecutor, which will execute all the methods of the ChannelHandler.
          This EventExecutor will use a different thread from the I/O thread, thus freeing up the EventLoop.

          Channel ch = ...;
          ChannelPipeline p = ch.pipeline();
          EventExecutor e1 = new DefaultEventExecutor(16);
          EventExecutor e2 = new DefaultEventExecutor(8);
           
          p.addLast(new MyProtocolCodec());
          p.addLast(e1, new MyDatabaseAccessingHandler());
          p.addLast(e2, new MyHardDiskAccessingHandler());

          http://stackoverflow.com/questions/12928723/netty-4-eventloopgroup-eventloop-eventexecutor-thread-affinity



          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 攀枝花市| 阳谷县| 大名县| 南华县| 连江县| 克什克腾旗| 富宁县| 无为县| 潜江市| 贵州省| 延寿县| 垣曲县| 齐齐哈尔市| 广宁县| 太康县| 莒南县| 上蔡县| 新巴尔虎右旗| 昌吉市| 朝阳区| 乐山市| 钟山县| 盘锦市| 拜城县| 沐川县| 侯马市| 理塘县| 廊坊市| 云龙县| 德清县| 姚安县| 北安市| 遂平县| 富源县| 万荣县| 肇州县| 栾川县| 新泰市| 双柏县| 理塘县| 花垣县|