【ライブロック】
ライブロック とは?
最終更新:
💡 廊下で同じ方向に避け続けて、すれ違えない二人
スレッドやプロセスが互いの動きに反応して状態を変え続けても、仕事が前に進まない状態。互いの待ちで停止するデッドロックとは異なる。
📌 このページのポイント
ライブロックって何? デッドロックとは違うの?
どちらも仕事が進まなくなる状態だよ。デッドロックでは相手が持つ資源などを待ち合う。ライブロックでは相手に反応して状態を変えたり、やり直したりしているのに、目的の処理が進まないんだ。
動いているのに進まないって、どんな感じ?
細い廊下で二人が、同じ側へ避け、また同じ側へ避けてすれ違えないイメージだよ。図の右・左は、二人それぞれの向きではなく廊下を上から見た同じ側を表しているんだ。プログラムでも競合すると手放して再試行する動きが繰り返されることがあるよ。
CPU使用率が高かったら、ライブロックなの?
それだけでは分からないよ。通常の計算でもCPU使用率は高くなるし、待ち時間を挟むライブロックなら高くならないこともあるんだ。再試行や状態変更の回数に加えて、処理の完了件数など、実際の仕事が進んでいるかを見るよ。
待つ時間を増やせば直る?
全員が同じ時間だけ待つと、また同時に再試行することがあるよ。待ち時間に乱数による揺らぎ(ジッター)を入れると、タイミングがそろうのを減らせるんだ。ただしランダムにするだけで必ず進むとは言えないので、進む側を決めるルールなども検討するよ。
リトライがたくさん発生していたら、全部ライブロック?
まとめ:ざっくりこれだけ覚えればOK!
「ライブロック」って出てきたら「動き続けているのに、仕事が進まない状態」と思えばだいたいOK!
📖 おまけ:英語の意味
「Livelock」 = 生きたままのロック(膠着状態)
💬 止まって動かないデッドロック(dead)に対して、動き続けている(live)のに進まないから、この名前だよ