BIO, NIO, AIO 大白话 - 澄澈大学生也能搞懂
<blockquote><p>最近天天吃沙县, 就拿沙县分析</p>
</blockquote>
<h2 id="bio">BIO</h2>
<p><em>Block I/O</em></p>
<p><img src="https://img2024.cnblogs.com/blog/3642195/202506/3642195-20250622230652342-2055708559.png"></p>
<ul>
<li>沙县分析</li>
</ul>
<p>相近时间来了4个顾客</p>
<table>
<thead>
<tr>
<th>顾客</th>
<th>菜品</th>
<th>时间</th>
</tr>
</thead>
<tbody>
<tr>
<td>A</td>
<td>筒骨饭</td>
<td>5min</td>
</tr>
<tr>
<td>B</td>
<td>茄子肉丝盖饭</td>
<td>7min</td>
</tr>
<tr>
<td>C</td>
<td>猪脚饭</td>
<td>3min</td>
</tr>
<tr>
<td>D</td>
<td>茄子肉丝盖饭</td>
<td>7min</td>
</tr>
</tbody>
</table>
<p>老板只能按照顺序 5+7+3+7 = 22分钟完工</p>
<p>每次做完一个菜, 还要问下一个顾客点的是什么(一心不能二用, 记不住<顾客, 菜品>键值对)</p>
<p>此时我们(用户)关心的是什么时候老板问到我要吃什么</p>
<h2 id="nio">NIO</h2>
<p><em>non-blocking I/O</em></p>
<p>服务端运行多个客户端发送消息, 不会阻塞</p>
<p><img src="https://img2024.cnblogs.com/blog/3642195/202506/3642195-20250623000427366-229092737.png"></p>
<ul>
<li>沙县分析</li>
</ul>
<p>相近时间来了4个顾客</p>
<table>
<thead>
<tr>
<th>顾客</th>
<th>菜品</th>
<th>时间</th>
</tr>
</thead>
<tbody>
<tr>
<td>A</td>
<td>筒骨饭</td>
<td>5min</td>
</tr>
<tr>
<td>B</td>
<td>茄子肉丝盖饭</td>
<td>7min</td>
</tr>
<tr>
<td>C</td>
<td>猪脚饭</td>
<td>3min</td>
</tr>
<tr>
<td>D</td>
<td>茄子肉丝盖饭</td>
<td>7min</td>
</tr>
</tbody>
</table>
<p>每一个handler(锅)只能处理一个菜品(可能要求比较高的饭店, 怕串味)</p>
<p>时间为 7+7 = 14分钟完工</p>
<p><strong>多路复用</strong></p>
<p>每个handler(锅)可以处理任何菜品(高效出餐)</p>
<p>时间为 Math.min(5, 7 ,3) + 7 = 10分钟完工</p>
<h3 id="单线程队列下的伪nio">单线程+队列下的<伪>NIO</h3>
<blockquote>
<p>没有block的IO就是NIO</p>
</blockquote>
<p>我们学校附近的沙县属于小本生意, 只有老板和和老板娘</p>
<p>人多的时候老板娘负责记菜, 老板负责炒菜</p>
<p><img src="https://img2024.cnblogs.com/blog/3642195/202506/3642195-20250623000417481-828289635.png"></p>
<ul>
<li>沙县分析</li>
</ul>
<p>每次顾客等的有点急了, 老板娘都安慰说<在炒了></p>
<p>那我们也不知道在没在炒, 万一真在炒了,还是等一下吧🙌🙌🙌</p>
<p>此时我们(用户)关心的是什么时候能开始炒我的菜</p>
<p>如果是BIO, 那有没有炒就一目了然了</p>
<h2 id="aio">AIO</h2>
<p><em>Asynchronous I/O</em>异步IO</p>
<p>我们在NIO中引入了分发器和处理器的关系</p>
<p>而AIO就是优化了分发器和处理器</p>
<p><img src="https://img2024.cnblogs.com/blog/3642195/202506/3642195-20250622230726574-100478575.png"></p>
<ul>
<li>沙县分析</li>
</ul>
<p>老板(后厨)对应内核区, 老板娘(前台)对应分发器, 我们对应处理器(处理食物)</p>
<p>那我们天天去吃, 跟老板也熟了,跟老板要了电话号码</p>
<p>我们要吃的时候, 跟老板说要两份, 放在3号桌</p>
<p>老板放菜到了3号桌, 老板娘问这菜谁的啊, 原来是那两小子</p>
<p>老板娘就打电话给我们, 说做好了, 我们马上跑到3号桌, 处理食物</p>
<p>此时我们(用户)关心的是什么时候菜上好</p>
<p><em>参考文章</em><br>
<em>Java NIO浅析(美团)</em> https://tech.meituan.com/2016/11/04/nio.html</p>
<hr><br><br>
来源:https://www.cnblogs.com/many-bucket/p/18943449
頁:
[1]