![](https://img.haomeiwen.com/i11772136/c50e929be5223126.png)
该模式有两个大的缺点:
1)一个线程对应一个连接,这样会导致线程过多。
2)当客户端没有数据发送时,服务器线程会阻塞。(in.readLine()方法会阻塞)
![](https://img.haomeiwen.com/i11772136/14cc0af4a7c7f62b.png)
一个IO线程通过Selector管理多个线程的连接,多个线程的socket会向Selector注册。Selector最终决定哪一个socket准备执行IO,因为线程的IO模式是非阻塞的。NIO优于BIO的原因:
- 用较少的线程处理连接,节约了内存并且减少了线程上下文切换。
- 当没有IO处理时,线程不会阻塞,而是处理其他请求
PS:以上图片出自《Netty in Action》以及Java NIO vs. IO
2018-01-03阅:
服务器端的NIO有两种模型:select和epoll
![](https://img.haomeiwen.com/i11772136/dfe25d181a5bf0ea.png)
![](https://img.haomeiwen.com/i11772136/eb605cfb50ff07c2.png)
epoll更高效,因为它不需要遍历所有的socket,只需要处理需要操作的socket
网友评论