• 我只是想开个饭店—— JavaIO模型的演变


      JavaIO。。。真的是我所见过的高级语言中。最最复杂的。。。

      

      看着这个图我也是醉了。

      但是不知不觉间,javaIO已经更新到了NIO.2了,IO库早已经不止是这个样子了,那么这个过程中,它们经历了怎么样的变化呢?在了解JavaIO之前,我们先来看看几种模型。

    咱就是提供独家服务

      在jdk没有推出NIO之前,java使用的IO模型都是BIOBlock Input Output)模型。那么什么是BIO模型呢?

      简单来说就是一对一的服务。好比新开了一家餐厅,来了一位客人,就买一张桌子放到餐厅里面去(应该没有这么蠢的老板吧。。orz.....),来了一千位客人,就放一千张桌子……

        “我去,餐厅不够大啊。。。。怎么破?”

      这个时候只能任性了……

        “买买买!咱再租一个场地,开个新店!”

      这就是传统的BIO模型,相当“任性”的模型,服务端会使用一个Acceptor线程监听客户端的连接,每当一个客户机向服务端发起一个链接,服务端就创建一个线程( Thread),当并发访问量增大,只能通过“买买买”的方法解决问题了。

      那么问题来了,T^T.

      “刚刚是做梦呢!我们真的好穷啊。”

    开窍的老板

      “咱搞个排号不就完事了么?”

      咱就这么多桌子,事先都买好了,每次客人坐满了之后,之后来的客人只能在外面等着了(没办法,谁让咱的饭菜就是这么好吃!)。

      这便是伪异步IO模型了。当客户端发起一个请求个服务端,服务端将请求封装成一个任务(Task)放入之前已经准备好的线程池(Thread Pool)。当并发请求数量超过线程池规定的大小时,迟一点发起的线程只能默默在队列中等待线程池中的资源了。

      相比BIO模型,这个模型已经提升了很多性能了。

      但是。。他还是伪异步IO模型!也许是名气太大了。越来越多的客人慕名而来。门口的等地区要挤爆了啊~~如果每桌的客户吃饭的时间又比较长(IO是阻塞的,需要等待IO执行完毕才会释放资源),咱根本hold不住啊!

    是时候,展现我们的智慧了

      我们更新了餐厅的排号系统,为了让有限的空间释放出最大的能量,我们也是蛮拼的。我们开始意识到客人是喜欢我们的食物的,那么让客人能及时地享用我们的食物才是最重要的(PM们,明确的需求分析很重要啊!)。

      我们把排号系统放到了网上,大家可以点外卖啊。客人们事先点好需要的食物,我们把食物做好后送到客人面前(服务很贴心,有木有!)。在这个期间,客人们可以去做自己的事情,而不会因为等待时间过长而感到烦躁。

      是的,这就是New IOjava1.4版本之后,提供了新的IO库,当然在jdk1.7中,NIO已经被升级到NIO.2了。客户端发出请求后,请求会立即返回。当服务端准备好数据后,就会把数据送回客户端。(可以看下我上一篇的博客《Please Call Me NIO》)

    总结

      这里简单分析了几个IO模型,接下来,我会结合一些代码继续写几篇blog

      最后,但愿世界上没有这么无脑的餐厅~

  • 相关阅读:
    XGBoost
    达梦数据库 日期格式转换
    当gitlab的数据库坏了,或者其他的组件坏了,修复教程。
    Hbase 协处理器之将数据保存到es (二级索引)
    分词与词性标注——常用分词工具
    路一直都在...
    CentOS删除桌面环境
    nginx+redis+tomcat session绑定
    Linux服务器挂载windows共享文件夹和nas存储
    centOS8.4图形界面火狐浏览器(firefox)报错问题:<toolbarbutton id="UITourTooltipClose" class="closeicon" 的解决办法
  • 原文地址:https://www.cnblogs.com/whthomas/p/4133993.html
Copyright © 2020-2023  润新知