美文网首页
同步非阻塞IO

同步非阻塞IO

作者: Vongola々骸 | 来源:发表于2018-12-01 13:50 被阅读0次

    这篇是无码的,我现在明白为什么无码的市场不好了,我自己都看不下去。各位可以直接跳到后面看我填坑

    服务员模型

    很多博客都有用餐馆服务员的例子来解释NIO,大概是这么个故事

      说是有那么个酒馆啊,它的掌柜给每桌客人都配个店小二,刚开始还好,反正一天就那么几桌客人,两个店小二就够用了。可是呢,随着客流越来越大,请的店小二就越来越多,这成本就遭不住了

    方案1

      聪明的掌柜就发现,其实在客人吃饭的时候,店小二完全是闲下来的,不需要在这里干等着,于是呢...

      故事讲到这里,大家就能发现,呃...偏题了。我们这节要讲的是NIO,嗯,IO划重点,客人吃饭这件事不在IO的范围内,我们这次先不讲,所以上面的故事划掉,我们来讲IO版的故事

    方案2

      聪明的掌柜就发现,其实在客人点餐之前,可能要多花点时间考虑考虑,店小二其实不用在这干等着,于是呢...于是掌柜的就想了个办法,让小二把客人带到桌子上,在大堂上挂了个菜单,等客人决定好要点什么菜之后,再叫小二来点菜,这个时候小二就可以去服务别桌的客人了,完美!


    同步非阻塞

    1. 啥是同步非阻塞
        什么是同步非阻塞呢,就是你的服务员在客人不需要你的时候不要在这傻等,还可以去做其它事情!放在一个网络请求里面,就是在某个IO事件未就绪的时候,不需要通过阻塞的方式来等待,可以去为其它的IO事件服务
    2. 哪些地方不该阻塞
        这些不需要阻塞等待IO事件都有谁呢?比如等待一个客户端连接(杵在门口等客人进店),比如等待客户端请求数据全部传输完成(杵在桌子前面等客人点菜)。关于write事件,结尾提
    3. 怎么搞
        服务员肯定是不能一直守着一桌客人来服务了。应该是哪桌客人需要就去哪桌。这里涉及到一个叫“反应器模式”的东西,它遵从一个“好莱坞原则”。有兴趣的同学可以去了解一下,这个原则的大体意思是“不要在这傻等着,回去等通知”
    4. 有什么好处
        很明显,对同样多的服务员来讲,可以同时服务更多的客人。也就是同一个线程可以处理更多的连接
    5. 有什么问题
      a. 客人享受不到VIP服务了。这个不算,机器不需要VIP服务
      b. 算了低频大数据量的连接问题就不说了

    填坑

    1. 我为什么要写一段没用的方案1
        水字数(手动划掉)我当初看了这个餐馆模型之后,脑子里面就一直都把“吃饭”这一步放在一个网络请求流程中去看NIO,到这里就歪了,歪了很远,其实还没到“吃饭”的时候,一次网络请求就已经完成了。后来者引以为戒,切记!
    2. 如何映射酒馆模型和IO模型
      • 进店:accept事件
      • 点餐:read事件
      • 后厨做菜:服务主业务逻辑
      • 上菜:write事件
    3. 为什么没有提write事件
      write事件的就绪条件是缓冲区有空间可写,这个条件基本上都是满足的,就好像客人在桌子上,做好了都是可以直接端上去的。
    4. 为什么没讲客户端
      瓶颈往往发生在服务端,如果想自己写个NIO的demo,其实你的client直接用传统IO的方式来做也是没啥毛病的
    5. 为什么没有测试小姐姐
      测试小姐姐没有IO基础,不想听我讲NIO...
    6. 想看有码的
      这里

    相关文章

      网友评论

          本文标题:同步非阻塞IO

          本文链接:https://www.haomeiwen.com/subject/fhibfqtx.html