NIO编程学习笔记(一)
基本概念“伪异步”JAVA socket I/O是阻塞型的,为每个请求开一个线程,并发请求过多时必然消耗大量资源,JDK1.5之前没有NIO,怎样解决高并发问题呢?可以采用线程池和阻塞队列实现一种“伪异步”的IO通信框架。
其实就是将客户端的socket封装成一个task任务(实现Runnable接口)然后投递到线程池中,线程池限制了系统为应用开辟的最大线程数,如果同时有大量的请求到来,超过了最大线程数,那么就会添加到阻塞队列中等待进入线程池。
这种方法实际上仅仅能够解决高并发引起的服务器宕机问题,但是并不能提高效率。
阻塞和非阻塞BIO(Blocking I/O)和NIO(Non-Blocking I/O)的区别,其本质就是阻塞和非阻塞的区别。
阻塞:应用程序在获取网络数据的时候,如果网络传输数据很慢,那么程序就一直等着,直到传输完毕为止。
非阻塞:应用程序直接可以获取已经准备就绪好的数据,无需等待。
BIO为同步阻塞形式,NIO为同步非阻塞形式,NIO并没有实现异步,在JDK1.7之后,升级了NIO库包,支持异步非阻塞通信模型,即NIO2.0
...