什么是Netty
上一篇文章 一文读懂NIO 中,我们介绍了NIO, Java的NIO类库与API都相当复杂,想要写好一个高质量的NIO的程序,你必须精通网络编程与多线程的知识。在这个背景下Netty诞生了,只要进行简单的编码就能开发出一个可靠、高性能的NIO程序。
Reactor模式
Reactor模型是一个事件驱动的模型,也是Netty参照的模型。
Reactor的组成:
1.Reactor
作为一个合格的资本家,你要懂得压缩成本。还记得 《3分钟了解linux网络IO模型》里的 多路复用吗,因为系统发不出工资,只留下一个盯梢的,把其他人毕业向社会输送人才。Reactor模式里面,Reactor就是那个被留下的幸运儿。
2.Handler
就是干杂活的社畜,实际上的读、写操作都是他们在干。
Reactor的3种模式:
1.单线程模式
client发出请求,Reactor通过acceptor接收请求后,就创建一个handler去干活。这个模式很简单,但是一个社畜(handler)的工作能力是有限的,一旦它阻塞住了,Reactor就接不了客了。这也是redis的设计模型。
2.多线模式
公司业务规模扩大了,老板觉得只有一个社畜有点忙不过来,就找了多个社畜一起干活,这就是多线程模式。这个阶段handler也从单线程这个创业初期解放出来了,具体干活的事情就丢给线程池中某个线程去干,它只要结果,然后给出反馈。
3.主从Reactor模型
公司规模再度扩大后,Reactor这个管理者开始忙不过来,他既要去接待客户(client),又要下发任务给社畜(handler)。所以老板又找了个人来进行职能切分,主Reactor用来接待所有来访的客户,把需求通过acceptor提给子Reactor。子Reactor开始指挥下面的社畜干活。
这种模式在业界广泛应用,如Nginx的主从多进程模式,Netty的主从多线程模式。
Netty的主从多线程模式
Netty的主从模式就是改造至Reactor的主从多线程模式
Boss Group
它是个线程池,专门用来接收客户端的连接请求
Worker Group
它也是个线程池,专门用来处理网络的读写操作。