名称的理解
BIO(Block-IO):(同步)阻塞IO
NIO(No-Block IO): (同步)非阻塞IO
AIO(asynch IO):异步(非阻塞)IO
从标题中我们可以看出主要差异点是:阻塞/非阻塞、同步/异步 , 理解这个问题的核心主要就在于理解:阻塞与非阻塞、同步与异步的差异究竟是什么。
PS:看的时候带着问题思考下,为什么没有ANIO(异步阻塞IO)?
阻塞与非阻塞
首先,我们先下个概述定义,阻塞非阻塞说的是线程的状态。
我们先从代码上看看关键的Blokc点,当我们申明ServerSoket并调用accept();方法后,由于这个Soket是运行在主线程中,这个accept后主线程会Block在这个地方{当然,如果你是New Thread来run ServerSoket 会阻塞这个新建的Tread,阻塞的运行线程。注意区分:BIO并不意味着单线程},等待Client的输入才会继续往下执行。
我们换一个理解方式,对整个信息网络理解为一个高速路+收费站的模型。
高速路上的车 == 来自客户端的数据
高速路收费站的work == serverSocket ,并且在这里只有一个高速路收费员。这种情况下收费员 = 主线程 。
阻塞模型下ÿ