说下自己的理解;
BIO:java.io包下的所有类都属于BIO模型,在活动连接数小于1000的时候性能还是不错的,每个线程干自己的事,干完了可能还会闲在那里没事干;但是遇到高并发时,因为CPU在不同线程之间频繁地切换会导致处理速度下降,所以引入NIO;
NIO:单独用一个线程去专门处理IO操作,普通线程只用请求IO处理,然后交给专门的线程去处理;CPU的线程就可以不用在不同JVM线程中频繁切换浪费时间,可以继续往下跑代码;
BIO为阻塞模型,没什么好说的;
NIO主要包含三个核心组件:Channel、Buffer、Selector
- Channel:Channel与Buffer进行交互,Channel可以对比Stream流,流是单向的,有输入流、输出流之分,如FileOutputStream、FileInputStream,而Channel是双向的,作为NIO的传输通道;
- Selector:多路选择器,实现在一个线程里调用不同的Channel传输数据;
- Buffer:任何读写操作,都是直接与缓冲区进行数据交换;NIO是对缓冲区的数据进行访问;而经典的BIO模型是对流进行访问;