之前看过太多博客,讲BIO、NIO的对比,有一说一,很多都是照本宣科,不知所云===或者都是直接复制其他博客,看着苦不堪言。
经过反复找视频和各种资料,终于基本懂了。所以这里我用最简单的话来讲BIO和NIO。
首先声明一点,IO主要分为本地磁盘IO和网络IO,在本地磁盘IO中BIO和NIO性能区别不大,我们主要讲网络IO。
BIO就是很早期的IO技术,阻塞型IO,流程大概这样:
1.客户端和服务端通过socket建立连接
2.连接之后新建一个线程,不管是否有输入输出,这个线程一直活着,除非连接断开了
所以很明显看出来BIO是有极大缺陷的,当服务器与一千个客户端建立连接时,就需要一千个线程一直活着,服务端濒临宕机~~~
讲讲NIO,流程大概这样:
1.客户端和服务端通过socket建立连接
2.服务端的selector线程为新建立的连接新建一个channel
3.当有输入请求时,客户端和对应的channel交互
4.selector线程持续轮询所有的channel,当有IO请求时新建一个线程完成IO逻辑执行,执行完成后线程销毁
所以可以看出当使用NIO的时候一台服务器扛上千个连接问题不大,因为一千个客户端同时有IO请求的概率不大,并且有IO请求新建线程的部分可以用线程池来解决,不用美次都去新建线程,因为IO完成后线程就可以结束了,性能上也有很大提升。
那么在网络通信NIO基础上,零拷贝之类的,则是另一个提升点,这个有空再写~