zoukankan      html  css  js  c++  java
  • http1.1线头阻塞

    HTTP1的效率低,问题在于他是半双工的。什么叫做半双工?说白了就是发送和接受只能同时做一个,协议要么是发送状态,要么是接受状态。TCP好歹是全双工的,收发可以同时进行,HTTP1是对TCP的传输能力的浪费。所以后来有个模式,叫做pipeline,这个勉强成为了一种低效率的全双工模式,但是请求和响应顺序必须完全相同。而且请求和响应都还是单向串行的。造成队头阻塞有两个场景,第一个场景,服务器处理一个请求太慢,这样,即使用pipeline模式把第二个请求也发送过去了,第二个请求比第一个请求先ready了,这个响应也不能发送,需要等到第一个完成后才行。这时候如果有一个序号机制,可以把第二个先发出去,这样的确会快一些。但是还有第二个场景。服务器响应不慢,但是第一个请求太大了,传输很慢。这样pipeline也还是有问题,第二个请求虽然很小,但是还是得等第一个传输完了,响应完了才行。这时候你的序号机制就没用了。所以要想让这两个情况都能让第二个请求不被第一个请求阻塞,最好的办法就是来两个TCP连接。传统上浏览器也是这么干的。但是TCP要握手,这个效率低,所以HTTP2把多个这种请求流塞到一个TCP连接里面,这样的连接复用方式就提高了效率,又节省了连接握手。需要注意HTTP2没有完全解决队头阻塞问题,因为实际中TCP的连接buffer有限,一个响应又慢,又大的请求会把链接buffer完全占满,导致buffer阻塞,从而导致跟队头阻塞一样的效果。

  • 相关阅读:
    ASP.NET Web应用程序与ASP.NET Web服务应用程序的区别
    【你必须知道的.NET】:【大话String】
    获取SQLServer数据库中所有表
    Window_Open详解收藏
    关于数据实现批量删除
    asp.net mvc 图形解析说明原理
    【转载】:C#语言
    泛型参数的约束
    SQL 常用函数小结
    [转载]:C#两种不同的存储过程调用方法
  • 原文地址:https://www.cnblogs.com/sea-stream/p/14139486.html
Copyright © 2011-2022 走看看