我读到并知道HTTP2将与每个客户端有一个单独的TCP连接。多个流可以在单个TCP连接上处于活动状态。但是,流发送和接收数据是并发的还是并行的?
如果它是并发的,它类似于操作系统的切换上下文。流将轮流发送或接收每个帧。
如果是并行的,流可以同时发送或接收数据。
我认为它是并发的,但我不确定。请帮帮我。
使用的正确术语是HTTP/2多路复用流是交织的,这相当于您所描述的"并发的";在你的问题中。
你可以在这个答案中看到一个交错的例子。
请注意,您所描述的";平行的";这是不可能的,因为通常一次只有一个来自一个TCP套接字的读取器线程。
如果每个线程都从自己的TCP套接字并行读取,并且有许多TCP套接字,则可以具有并行性,但只有一个TCP套接字的读取是顺序的,并且一旦解析了读取的字节,HTTP/2帧就会交错。
最后一个修正是HTTP/2没有强制客户端只打开一个到服务器的TCP连接。这是一个实现细节。浏览器供应商已经决定只打开一个,但其他HTTP/2客户端库,特别是在用于负载测试时,允许打开多个到服务器的TCP连接,并且通常会将这些连接集中起来以重用它们。