HoLブロッキング
順番に処理する仕組みで、先頭の処理が遅れたり止まったりすると、その後ろに並んでいる処理まで待たされてしまう問題。HTTP/1.1やTCPで起こり、HTTP/2やHTTP/3はこれを減らすために作られた。
イマシルちゃんの解説
1車線しかない道路で、先頭の車がエンストしたら、後ろの車はみんな動けなくなっちゃうよね。
後ろの車は何も悪くないのに、待たされるんだ。
これがHoL(ヘッド・オブ・ライン:列の先頭)ブロッキング!
Webページの画像をたくさん読み込むときにも、1つの画像が遅れると、残りの画像まで待たされちゃうことがあるんだよ。
より深い解説
定義
HoLブロッキング(Head of Line blocking:先頭による阻害)は、要求や データを直列に(順番に)処理する仕組みで、列の先頭にあるものの処理が終わるまで、後続のものが処理されずに待たされる現象である。
発生する層と対策
| 層 | 原因 | 対策 |
|---|---|---|
| HTTP(HTTP/1.1) | 1つのTCP接続の上では、リクエストを送ったら、そのレスポンスが返るまで次のリクエストを送れない(パイプラインでも、レスポンスは順番どおりに返す必要がある) | ブラウザが、同じサーバに複数のTCP接続を同時に張る(一般に最大6本程度) |
| HTTP(HTTP/2) | − | 1つのTCP接続の中に、ストリームを複数作り、リクエストとレスポンスを並列にやり取りする(多重化) |
| TCP | TCPは、送ったデータを順番どおりに届ける。1つのパケットが失われると、後ろのデータは届いていても、再送が届くまでアプリケーションに渡されない | HTTP/3(QUIC)で、UDPの上でストリームごとに独立して順序を管理する |
HTTPのバージョンごとの違い
| バージョン | HTTPのHoL | TCPのHoL | NAPTの変換エントリー |
|---|---|---|---|
| HTTP/1.1 | 起きる | 起きる | 並列にするため、TCP接続が増え、エントリーも増える |
| HTTP/2 | ストリームで解消 | 起きる(1つのTCP接続の中の全ストリームが影響を受ける) | 1つのTCP接続で済み、エントリーが減る |
| HTTP/3 | ストリームで解消 | 起きない(QUICがストリームごとに管理) | 1つのQUIC接続(UDP)で済む |
通信機器のHoLブロッキング
スイッチでも、入力ポートのキュー(待ち行列)の先頭のフレームが、混雑している出力ポートへの送信待ちで止まると、後ろにある別の出力ポート宛てのフレームまで待たされる。これもHoLブロッキングと呼ばれ、出力ポートごとに仮想的なキューを持つ(VOQ)ことで対策する。
午後での問われ方
「全ての処理が完了するまでに時間がかかる理由」を問われたら、先行の処理が終わるまで後続の処理が待たされるから、という直列処理の性質を答える。