同步和异步:主要是看应用程序和系统内核的交互行为。当然咱们编写的程序就是应用程序。当我们的程序主动向内核发送询问请求的时候,这就属于同步,即应用程序需要从你这知道结果,但不是立马,应用程序会不定时的来询问内核;而异步则是内核主动通知应用程序----你需要地结果出来了,即内核 主动通知应用程序。
阻塞和非阻塞:是应用程序的在做事情的状态,做某一事情的时候不能做其他事情,这就是阻塞;在做某一事情的的同时,我可以去做别的事情。
在银行办业务。
阻塞:我必须去排队(其他所有事情都不能做),哪怕我前面只有一个人,我都要等前一个人完成,我才能办理业务。
非阻塞:我也必须去排队,但是我可以先给朋友打个电话聊个天。
同步:我会主动的去询问 我能办理业务了么
异步:在轮到我办理业务的时候,银行人员会来告诉我 该我了。
那么开始组合了:
同步阻塞:我在排队,并且什么别的事都不能做,并且隔一会问一次:该我了么?
同步非阻塞:我在排队,我可以看个电影(不能专心致志),但是会隔一会问一次:该我了么?
异步阻塞:我会排队,并且别的什么事都不能做,但是我可以不用老是询问了,有工作人员回来通知我。
异步非阻塞:我会排队,可以专心致志看个电影,不用老是抬起头问询问了,会有工作人员来通知我。
以上只是把相关概念用大白话说一遍,不牵扯到具体代码实现,我目前还不能做到代码实现,或者说我不相信自己能够写出来。
其实仔细想想,io和nio的出现是有一定的逻辑的,就如同我说的那些生活中的例子,当然不能说那个方式更好,只有更加适合的。
BIO/IO就是传统的阻塞时式IO,也就是 同步阻塞
NIO就是非阻塞式IO,也就是 同步非阻塞
AIO就是异步io,包括 异步非阻塞和异步阻塞。其实针对上面你的例子,异步的作用就是不需要你去等待结果,会有人来通知你结果,那么你就没有(干等着)阻塞的必要了。。。。