温故而知新,可以为师矣。
IO,又叫BIO,翻译过来就是同步阻塞输入输出。java1.4之前支持。
NIO,翻译过来就是同步非阻塞输入输出。java1.4开始支持。
AIO,翻译过来就是异步非阻塞输入输出。java1.7开始支持。
NIO是对BIO的改进,从支持一个连接,优化成支持多个连接。提高了NIO的并发处理能力。怎么做到的呢?服务器端实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器selector上,selector轮询到有IO请求时,就启动一个线程处理。
AIO是对NIO的改进。从同步改成了异步。提高了BIO的处理速度。怎么做到的呢?服务端的实现模式为一个有效请求一个线程,客户端的IO请求都是由操作系统先完成了再通知服务器应用去启动线程进行处理。让每个线程都不要闲着,IO交给操作系统以后如果没法读写,那就先去做其他事情,等这边可以读写了,reactor会通知你。
1,IO面向流操作,NIO面向缓冲区操作。
2,IO是阻塞的,NIO是非阻塞的。
3,IO是一个线程处理一个请求,NIO支持选择器,一个IO可以处理多个请求。两者都是同步的,也就是说,不会直接返回,必须等到读写操作完成才返回,这就是同步。BIO与NIO的本质区别就是NIO通过Selector选择器,可以同时处理多个请求,而BIO只能处理一个请求。
NIO三大技术要点:
缓冲区,Buffer,是一个容器,对应于内存中的一块区域数据先存入缓冲区,然后再进行检索。
通道,Channel,通道提供的是一种途径,可以用最小的总开销,来访问操作系统本身的IO服务。通道可以是双向的,也可以是单向的,只实现了接口中的read()或者weite()方法的通道是单向的,实现这2个方法的通道是双向的。
选择器,selector,所有的通道都被注册到选择器上,然后选择器会监听所有通道。
网友评论