BIO/NIO/AIO的区分
BIO:同步阻塞IO(平常说的IO指的是BIO) NIO:同步非阻塞IO AIO:异步非阻塞IO io操作分为两部分,发起io请求,和io数据读写。 阻塞、非阻塞主要是针对线程发起io请求后,是否立即返回来定义的,立即返回称为非阻塞io,否则称为阻塞io。 同步、异步主要针对io数据读写来定义的,读写数据过程中不阻塞线程称为异步io,否则,称为同步io。 一、BIO 线程发起io请求后,一直阻塞(阻塞io),直到数据就绪后,用户线程将数据写入socket空间,或从socket空间读取数据(同步)。 JDK5之前, JDK的IO模式只有BIO(同步阻塞)。 问题:因为阻塞的存在, 需对每个请求开启一个线程. 过多的线程切换影响操作系统性能。 解决:使用线程池, 处理不过来的放入队列, 再处理不过来的会触发其他机制。 问题::超过线程池数量的请求需要等待。 1. 客户端 public class Client { final static String ADDRESS = "127.0.0.1"; final static int PORT = 8765; public static void main(String[] args) throws IOException { Socket socket = null; BufferedReader in = null;