HoLブロッキング

読み:ほるぶろっきんぐ / 英語表記:Head of Line blocking

順番に処理する仕組みで、先頭の処理が遅れたり止まったりすると、その後ろに並んでいる処理まで待たされてしまう問題。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接続の中に、ストリームを複数作り、リクエストとレスポンスを並列にやり取りする(多重化)
TCPTCPは、送ったデータを順番どおりに届ける。1つのパケットが失われると、後ろのデータは届いていても、再送が届くまでアプリケーションに渡されないHTTP/3(QUIC)で、UDPの上でストリームごとに独立して順序を管理する

HTTPのバージョンごとの違い

バージョンHTTPのHoLTCPのHoLNAPTの変換エントリー
HTTP/1.1起きる起きる並列にするため、TCP接続が増え、エントリーも増える
HTTP/2ストリームで解消起きる(1つのTCP接続の中の全ストリームが影響を受ける)1つのTCP接続で済み、エントリーが減る
HTTP/3ストリームで解消起きない(QUICがストリームごとに管理)1つのQUIC接続(UDP)で済む

通信機器のHoLブロッキング

スイッチでも、入力ポートのキュー(待ち行列)の先頭のフレームが、混雑している出力ポートへの送信待ちで止まると、後ろにある別の出力ポート宛てのフレームまで待たされる。これもHoLブロッキングと呼ばれ、出力ポートごとに仮想的なキューを持つ(VOQ)ことで対策する。

午後での問われ方

「全ての処理が完了するまでに時間がかかる理由」を問われたら、先行の処理が終わるまで後続の処理が待たされるから、という直列処理の性質を答える。

実際の試験ではここに出る!

この用語が出てくる記事

↑