本文原创地址,
我的博客
:https://jsbintask.cn/2019/04/16/essay/nio/(食用效果最佳),转载请注明出处!
在理解什么是BIO,NIO,AIO之前,我们首先需要了解什么是同步,异步,阻塞,非阻塞。假如我们现在要去银行取钱:
同步
: 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写);
异步
: 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS(银行卡和密码),OS需要支持异步IO操作API);
阻塞
: ATM排队取款,你只能等待(使用阻塞IO时,Java调用会一直阻塞到读写完成才返回);
非阻塞
: 柜台取款,取个号,然后坐在椅子上做其它事,等号广播会通知你办理,没到号你就不能去,你可以不断问大堂经理排到了没有,大堂经理如果说还没到你就不能去(使用非阻塞IO时,如果不能读写Java调用会马上返回,当IO事件分发器会通知可读写时再继续进行读写,不断循环直到读写完成)
BIO
Blocking IO
,同步阻塞式IO,jdk1.4以前,一直采用BIO编程模型,在Socket
网络编程中,我们通常会使用ServerSocket.accept()
方法获取一个新连接,该方法会阻塞当前主线程,所以通常一个连接来了后,会将其放入线程池去执行后续操作。而