缘起
日前在看netty的工作原理,对netty的线程模型很是不能理解,查阅了诸多资料,终于有了一些眉目。特此记录,以备查阅。
阅读对象
netty中的NIO编程模型是基于java Nio的封装,所以需要读者对java NIO有一定的了解,篇幅所限,本文不会对NIO再做详述,有需要的读者可以查看JAVA BIO,NIO,AIO详解(附代码实现)以及Netty的简介
Netty的NIO线程模型
说netty的线程模型之前,先说传统NIO的使用方式中的关键代码
可以看到是当前线程获得了客户端的连接之后再重新把channel注册到selector上,同时把事件注册为读,这样就可以开始读消息了。也就是说获取tcp连接和读取消息都是在同一个线程里面处理的。那么这种方式有什么问题呢?对于一些小流量应用场景,可以使用单线程模型。但是对于高负载、大并发的应用场景却不合适,主要原因如下: