一. 线程数
BIO:一个客户端连接就要使用一个服务端线程来进行处理
可能会有大量的想爱你成处于休眠状态,只是等待输入或输出(阻塞)
为每个线程分配调用栈,大约1M,服务端内存吃紧
即使服务端内存很大,线程数太大会导致线程上下文切换浪费大量时间
NIO:一个服务端线程操作一个Selector,就可以处理成千上万的客户端连接
二. 阻塞情况
BIO:读、写、接受连接都会发生阻塞
NIO:只有Selector.select()会阻塞,其实是等待Channel上的“就绪事件”
三. 面向对象
BIO:面向流
NIO:面向Buffer
四. 适合点
BIO:如果你有少量的连接使用非常高的带宽,一次发送大量的数据,也许典型的IO服务器实现可能非常契合
NIO:如果需要管理同时打开的成千上万个连接,这些连接每次只是发送少量的数据,例如聊天服务器,实现NIO的服务器可能是一个优势。
网友评论