要解决BIO存在的性能问题,本质上是要做到:
1. 让线程不再阻塞
2. 让一个线程能处理多个客户端连接
可以使用下图来简单理解NIO的思想
对上图的说明:
1. 每个client在服务器端有一一对应的buffer和channel
2. 多个channel可以注册到一个selector上
3. 服务端可以有一个或多个selector
4. 每个selctor有一一对应的thread来处理
5. 所以服务端可以用少量的线程来处理较多客户端的连接
6. 这张图其实并没有完整描述出NIO的优点以及正确的用法,比如较好的实践中,一般处理连接事件的selector/线程,和处理读写事件的selector/线程,是分开的。
7.NIO的主要由 Selector,Channel,Buffer三部分组成。
接下来开始介绍Buffer