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中。