BIO---BlockingIO---同步式阻塞式IO*
NIO---NewIO---NonBlockingIO---同步式非阻塞式IO*
BIO | NIO |
①流是有方向的, 比如输入流,输出流 ②流的是数据是连续不断的,所以决定了不能根据位置 去灵活的操作数据。
BIO是一种阻塞通信模型,比如java.bio的socket模型, accept(),connect(),read(),write()方法会产生阻塞。 由于阻塞通信,所以BIO的模型是一个请求产生一个线程, 所以请求数量越多,线程数量越多。 由此带来的问题是内存的占用,以及cpu对应线程的调度管理, 包括内存管理,内存碎片,内存环境等等。所以BIO阻塞通信模型 不适用于高并发高访问量场景。 | ①通道Channel,在一个通道上,同时可以进行数据的输入和输出。 是一个数组结构。缓冲区的大小可以自己设定。 此外,注意在实际工作中缓存区最好不要超过32GB Buffer是分配在JVM的堆内存里,由JVM进行管理, 比如内存分配以GC回收,JVM有一种指针压缩技术, 用32bit的指针最大可以表示32GB数据, 如果超过32GB数据,则指针压缩技术失效, 会变成普通指针,普通针对会增大, 即比如50GB数据等效于原来的32GB 多用户请求。 |
NIO的适用场景:高并发,高访问量,短请求
BIO的使用场景:访问量少,长请求(比如下载一个大文件等场景)