1.阻塞和非阻塞的概念:
阻塞和非阻塞是进程在访问数据的时候,数据是否准备就绪的一种策略。
阻塞:等待缓存区数据准备好后,才处理其他事情。否则就一直等等。
非阻塞:缓存区数据没有准备,直接返回,不等待。数据有的时候,也直接返回。
2. 同步和异步的概念:
同步和异步都是基于应用程序和操作系统os处理IO事件方式不同;
同步:直接参与os读写IO操作,会阻塞在某个方法上面等待IO事件完成(阻塞IO/轮询IO事件)
异步:IO读写都交给OS系统,可以做其他事件,等os操作Io完成,会给应用程序一个IO事件完成通知;
3. 同步:
1)阻塞IO事件:同步阻塞到write或read,这个时候阻塞不能处理别的事情。如果让IO阻塞读写写到线程里面,对线程开销大
2)IO事件轮询: select模式(多路复用模式)同步阻塞到write或read,使用单独的线程去处理,不断的去轮询读写缓存区,之前的线程就可以做别事件,阻塞不是所有的io线程,而已select线程。
select 类是 观察者模式把,比如主线程 注册了某个IO事件,select 负责完成后,然后发出通知,主线程接收到再处理:
4 BIO NIO AIO概念:
BIO: jdk1.4 以前使用栋都是BIO 阻塞IO
NIO: jdk1.4 Linux 多路复用技术(select模式) IO事件轮询
方式:同步非阻塞的模式,主流的模式,netty4 Mina2等
AIO: 异步非阻塞:Linux epoll模式;