文章出自博客园leesf的博客
Java NIO
Netty
1.不再显式调用 Java ByteBuffer的flip()方法
2.数据读写使用不同的索引
3.使用池
4.使用引用计数释放资源
1.当ChannelInboundHandler的实现覆盖channelRead()方法时,
它负责显式释放与池的ByteBuf实例相关联的内存,可以使用ReferenceCountUtil.release() 方法进行释放;
2.SimpleChannelInboundHandler会自动释放资源,因此无需显式释放;
3.ChannelPipeline是由一系列ChannelHandlers组成,其还提供了通过自身传播事件的方法,
当进站事件触发时,其从ChannelPipeline的头部传递到尾部,而出站事件会从右边传递到左边。
4.ChannelHandlerContext的主要功能是管理相关ChannelHandler与同一ChannelPipeline中的其他ChannelHandler的交互。
- EventLoop和线程模型
线程模型
1.从池中空闲链表中选取线程,然后将其分配赋予给已提交的任务。
2.当线程完成工作时,该线程又返回至空闲链表,可再进行复用。
EventLoop
1.由一个永不改变的线程驱动(一个EventLoop对应一个线程)
2.任务调度,EventLoop继承ScheduledExecutorService,因此可以调用ScheduledExecutorService的所有方法。
3.不要把长时间的任务放在执行队列中,因为它将阻止任何其他任务在同一个线程上执行。
如果必须进行阻塞调用或执行长时间运行的任务,建议使用专用的EventExecutor。
问题