一种流行的说法是,由于线头(HoL)阻塞现象,HTTP流水线操作会降低下载站点的性能。此性能是否与单个非流水线持久HTTP连接或同时打开的多个TCP连接进行比较,以便并行下载站点资源?
在第一种情况下,我无法真正看到阻止发送后续较小的响应的大响应会导致性能下降。是的,会发生阻塞。但是在单个非流水线持久HTTP连接的情况下,每次客户端发送请求时以及每次服务器发送响应时都会发生HoL阻塞现象。表现可能更差的唯一原因是我能够想到的是:
1)正确排队/缓冲请求/响应所需的时间可能比服务器可以开始处理第n个请求而无需等待第(n-1)个请求的处理所节省的时间更长去完成。但它基本上归结为正确地对请求/响应进行编号,因此如果必须处理许多小的请求似乎更令人担忧(排队/缓冲相关的计算不太可能比处理大响应并且人们指出HoL阻塞可能是一个问题是指大响应,而不是小响应)并且它与HoL阻塞没有直接关系;
2)如果许多客户端启用了流水线操作,则可能需要有效缓冲许多大型响应,从而导致服务器端的内存耗尽。但这是一种特殊的情况,显然在谈到在浏览器中启用移植能够使性能变差时,人们不会想到这一点。
另一方面,在将流水线技术与多个同步TCP连接进行比较的情况下,很容易看出在发送后续较小的TCP连接之前发送大响应的必要性会降低速度。
但是,如果对单个非流水线的HTTP连接进行比较,并且流水线操作确实会导致性能下降 - 您能否展示一些显示的基本(可能是简化的)计算?
我试图在互联网上搜索我的问题的回复,但无法找到它。
我尝试过的一些资源:
https://devcentral.f5.com/articles/http-pipelining-a-security-risk-without-real-performance-benefits
What are the disadvantage(s) of using HTTP pipelining?