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

BIO

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

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

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

两张图对比 BIO 与 NIO

NIO

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

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

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

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

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

Buffer:可以理解为菜单。

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

两张图对比 BIO 与 NIO 

相关文章:

  • 2021-05-07
  • 2018-10-10
  • 2021-06-26
  • 2021-08-16
  • 2021-12-31
  • 2022-01-13
猜你喜欢
  • 2021-12-13
  • 2022-01-23
  • 2021-11-02
  • 2021-12-29
  • 2022-12-23
  • 2022-12-23
  • 2021-12-15
相关资源
相似解决方案