两张图对比 BIO 与 NIO

这里通过现实中客人在饭店点餐的场景来模拟 IO过程。

BIO

这里客人代表 socket 客户端,餐厅代表服务端,服务员代表服务端线程池中的线程,服务员接待客人的过程等价于线程处理 IO 请求的过程。

这样每新来一位客人,都会有一名服务员来接待,服务员帮客人点完餐交给后厨之后才能继续接待下一位客人。当所有服务员都处于忙碌状态时,再有新来的客人便只能在座位等待了,直到有服务员空闲。

可以看到,这种方式在客人不是很多的情况下是不会有问题的,一旦客流量增加,服务员忙不过来,就会导致大量客人处于等待点餐的状态,严重影响客户体验。

NIO

在 NIO 的模式下,对客人点餐的流程进行了优化。

每个客人进到餐厅之后都会由大堂经理安排一名服务员引导就坐,服务员会拿一份菜单交给客人,然后便回到大堂继续待命。

客人可以勾选出自己想点的菜,点完之后再找到服务员,提交菜单,服务员再将菜单交给后厨便可以了。

这里客人点餐的过程已经无需服务员全程陪同了,一名服务员便可以服务于多位客人,这便是多路复用机制。

Selector:大堂经理,安排服务员接待客人就坐点餐。

Buffer:可以理解为菜单。

Channel:服务员将菜单交给后厨的过程可以理解为是在 Channel 中进行的。

发布了149 篇原创文章 · 获赞 100 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/u011212394/article/details/103796894