文章目录
IO
首先:什么是IO?
IO,Input/Output 简写,是指内存和外设之间的数据复制的过程。 输入是指数据从外设复制到内存中, 输出则是指数据从内存复制到外设。
目前,IO 可以通过数据流、序列化和文件系统为系统提供输入和输出
而 Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。
Java IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。
现在使用NIO的场景越来越多,很多网上的技术框架或多或少用到了NIO技术,譬如Tomcat、Jetty,还有基于nio的网络编程框架Netty。
为什么要改进IO?
这一切都是高并发量“惹的祸”!!!
一个使用传统阻塞I/O的系统,如果还是使用传统的一个请求对应一个线程这种模式,一旦有高并发的大量请求,就会有如下问题:
- 线程不够用, 就算使用了线程池复用线程也无济于事;
- 阻塞I/O模式下,会有大量的线程被阻塞,一直在等待数据,这个时候的线程被挂起,只能干等,CPU利用率很低,换句话说,系统的吞吐量差;