我们在进行一次总体的回顾
在之前我们提到EventLoop上面可以分配一个或多个Channel,但是一个EventLoop里面只有一个 线程,这样的话我们得出一个结论,千万不要在你的ChannelHandler通道里面做任何耗时的操作。(比如说jdbc以及数据库的操作等)
对于耗时操作来评价主要是更具你的系统来决定,有些系统觉得500毫秒是一个耗时操作,有些系统觉得1秒是一个耗时操作。
这里注意一点:当你去执行Channel的时候,它一定回去判断你当前使用的线程是否是当前EventLoop里面的线程。如果不是的话,它会以任务的形式交给EventLoop里面的线程去执行。因此netty就保证了同一个channel中任务执行的顺序一定是任务提交的顺序。(因为只有一个线程)
下面这里是我们开发的时候特别要注意的地方
接着我们就可以将任务放入到submit方法中去执行,我们可以看到当处理执行到这里的时候,将任务交给ExecutorService之后,它就继续执行它后面的任务了。这样就不会影响到后面要执行的任务。
查看一下它的源码
因此总结如下