Java BIO & NIO
2018-07-20 本文已影响87人
packet

该模式有两个大的缺点:
1)一个线程对应一个连接,这样会导致线程过多。
2)当客户端没有数据发送时,服务器线程会阻塞。(in.readLine()方法会阻塞)

一个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


epoll更高效,因为它不需要遍历所有的socket,只需要处理需要操作的socket