云自無心水自閑

          天平山上白云泉,云自無心水自閑。何必奔沖山下去,更添波浪向人間!
          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)站導航:
           
          主站蜘蛛池模板: 靖远县| 新野县| 长海县| 佛教| 长治县| 昌吉市| 湘潭市| 樟树市| 武山县| 亳州市| 茂名市| 五华县| 马尔康县| 庆城县| 娱乐| 新河县| 阳西县| 岐山县| 科技| 股票| 宣汉县| 府谷县| 沅陵县| 三门峡市| 黑河市| 湖南省| 中卫市| 双桥区| 公主岭市| 阜康市| 贵溪市| 囊谦县| 淮南市| 台江县| 长白| 祁门县| 济宁市| 自治县| 威信县| 出国| 肃宁县|