http2中具有单个TCP连接的多个流



我读到并知道HTTP2将与每个客户端有一个单独的TCP连接。多个流可以在单个TCP连接上处于活动状态。但是,流发送和接收数据是并发的还是并行的?

如果它是并发的,它类似于操作系统的切换上下文。流将轮流发送或接收每个帧。

如果是并行的,流可以同时发送或接收数据。

我认为它是并发的,但我不确定。请帮帮我。

使用的正确术语是HTTP/2多路复用流是交织的,这相当于您所描述的"并发的";在你的问题中。

你可以在这个答案中看到一个交错的例子。

请注意,您所描述的";平行的";这是不可能的,因为通常一次只有一个来自一个TCP套接字的读取器线程。

如果每个线程都从自己的TCP套接字并行读取,并且有许多TCP套接字,则可以具有并行性,但只有一个TCP套接字的读取是顺序的,并且一旦解析了读取的字节,HTTP/2帧就会交错。

最后一个修正是HTTP/2没有强制客户端只打开一个到服务器的TCP连接。这是一个实现细节。浏览器供应商已经决定只打开一个,但其他HTTP/2客户端库,特别是在用于负载测试时,允许打开多个到服务器的TCP连接,并且通常会将这些连接集中起来以重用它们。

最新更新