一则小故事带你了解HTTP/2的多路复用,加深记忆想忘都难(假的)

写在前面(可跳过)

只看多路复用的概念发现我这个脑子只是看看是不行的,须要用生动形象的例子加深记忆。
若是你也和我同样那么你能够抽出一点时间听我给你讲个小故事。
【经过我本身的理解编的,有不对的地方麻烦路过大佬指正】web

来咯

想象你在某当劳里买汉堡,柜台有个点餐员浏览器

HTTP/1.0版本

点餐员只能记住你点同样东西。
你想吃汉堡、薯条、鸡米花,你须要和点餐员说我要吃汉堡(stop,再多说点餐员记不住了(;д;)),而后点餐员去给你拿汉堡,把汉堡交给你,点餐结束。
你说点餐员我还要薯条,点餐员重复上述步骤,点餐结束。
你说点餐员我还要鸡米花,依旧重复...
...
这实在是太麻烦了,若是我须要点个公司团餐,我须要不停地点餐。
! 这个时候,一个叫keep-alive的记事本出现了
点餐的时候带着keep-alive记事本,把你想点的东西全都写上去给点餐员看,点餐员就能一次记住多样东西了
可是你每次点餐都要带着keep-alive记事本,这仍是有点麻烦服务器

HTTP/1.1版本

这个版本的点餐员自备了keep-alive记事本,当你去点餐的时候你能够两手空空的就去了。设想两个场景编辑器

  1. 你想吃超豪华汉堡,哦还要一瓶水,因而点餐员在记事本上写着超豪华汉堡、一瓶矿泉水。
    超豪华汉堡工序复杂,可能须要一阵子才能作完。你都快渴死了,点餐员也不给你水而是和你面面相觑...
    ...(点餐员说我也没办法我这个记事本是无序的,我怕搞乱,仍是等着吧(。•́︿•̀。))
    嗯,真的要渴死了!好气
    (若是你的同事们又给你打电话说你再来两单,其中一单是一份薯条,一份鸡米花,一个冰淇淋;另外一单是...由于你的汉堡仍是没有作完,这个时候又来两单,都得等着,这称为 队头阻塞
  2. 假如设定顾客们最大的点餐数,好比60,咱们点6单。由于点餐员一共能够处理60个,这样每单最多能够点10个吃的。
    当你的记事本上密密麻麻写了20个想要点的东西时,点餐员只能给你处理10个,剩下的只能将前面点的处理完才能处理。
    虽然你很崩溃可是点餐员也表示无能为力!

HTTP/2版本

鉴于前几个版本的用户体验一直不是很好,因而多路复用出现了。
多路复用是什么?
是为了解决前面那些麻烦状况优化

  1. 你想吃烤翅、超豪华汉堡、一瓶矿泉水。前两个制做过程缓慢,因而点餐员不在窗口等它们,而是去冷藏柜里给你拿了一瓶矿泉水,用帧(用来标记顺序的标识, 二进制帧)给你的矿泉水瓶标记一个3,而后再回窗口等别的。以后烤翅烤好了,点餐员给了你烤翅顺便用帧给你的烤翅袋上标记了一个1,紧接着汉堡也作好了,点餐员给了你一个带着2的汉堡。
    ! 过程当中你的同事们给你打电话叫你再下两单给他们带着,点餐员也会在过程当中尽快给你拿到已经作好的吃的。由于帧标记了你的单号、点餐顺序,即便不是按顺序出餐你也不会搞乱,固然点餐员也不会搞乱(二进制帧组成了 ,以保证顺序不会乱)。
  2. 由于上面这种优化使得你点了20个想吃的东西,由于点餐员有帧进行顺序标识,根本不用等!由于假设限定了顾客最多点60个,如今点餐员能够单单处理60个,下6单就是处理360个!比原来的效率提高了六倍! <(▰˘◡˘▰)>
    这就是多路复用

解释

点餐:一个HTTP链接(三次握手四次挥手,嗯服务态度很好)
点餐员:服务器
咱们:浏览器
其余概念文中已大写加粗(没注意?那就再看一遍!spa

最后

其实想要真正理解仍是须要看概念,网上有不少能够自行百度。小故事只是带你们粗略了解或是加深记忆不那么容易忘记。但愿咱们每学一个知识点都能真正的理解,熟练掌握,把别人那里学来的变成本身的。orm

本文使用 mdnice 排版ci

相关文章
相关标签/搜索