Netty中以往的异步执行taskqueue和现在Netty的异步执行

1、以往是直接把任务放进TakQueue,但其实这种方式,跟Server的业务线程用的是同一个io线程

    ch.eventLoop().execute(new Runnable() {
        @SneakyThrows
        @Override
        public void run() {
            TimeUnit.SECONDS.sleep(10);
            System.out.println("喵1");
        }
    });
    //这里加入了自定义的handler
    ChannelPipeline pipeline = ch.pipeline().addLast(new NettyServerHandler());//通过chnnel可以得到pipeline
}

2、那么有什么方法还可以实现异步处理呢?

①处理耗时业务的第一种方式---handler 中加入线程池:

也就是在自定义的handler中加入EventExecutorGroup,然后使用group.submit的方法来执行业务

  //给handler加入异步线程池
static final  EventExecutorGroup group=  new DefaultEventExecutorGroup(16);

 ②处理耗时业务的第二种方式---Context 中添加线程池

这个就是直接在server或者client加入EventExecutorGroup:

static final EventExecutorGroup group= new DefaultEventExecutorGroup(2);

然后需要给pipeline加handler的时候,把该handler放入线程池中

 

※这两种的区别:

第一种方式,他可以实现,在业务handler里面,针对性的使用线程池,比如handlerread里面比较耗时的使用group线程,但是就是handler的响应时间会减慢

第二种方式,他是把一整个handler都放进去了Group中,这样子的优点就是相对第一种响应会比较快,但是缺点就是,会把所有的业务都放到group中。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值