但是在当前的互联网时代,客户端的连接可能是百万、千万甚至上亿级别的,服务器不可能创建这么多的线程来处理客户端请求。这就是传统IO
网络连接的性能瓶颈所在。
(2)模型优化
如上一节内容所述,传统的IO
模型的性能瓶颈在于服务端需要为每一个socket
连接分配线程来满足业务处理的需要。那么有没有一种方法可以不需要建立那么多连接也可以处理客户端的请求呢?如果要用一个线程处理多个请求,那么BIO
是无法实现的。所以我们可采用java
中的NIO
来完成此部分的优化操作。Netty
的做法是采用Reactor
模式,所谓Reactor
模式就是是一个使用了同步非阻塞的I/O多路复用机制的模式。这里不再展开说明。
在Netty
的世界中,EventLoopGroup
是一个非常重要的核心概念。所谓EventLoopGroup
就是就是EventLoop
的集合,即为事件循环。其中NioEventLoop
负责轮询多路复用器,获取已经处于就绪状态的通道,执行网络的连接、客户端请求接入、读和写相关操作。bossGroup
就用来处理连接请求的,而 workerGroup
是用来处理读写请求的。bossGroup
处理完连接请求后,会将这个连接提交给 workerGroup
来处理, workerGroup
里面有多个 EventLoop
, workerGroup