Loading article…
コンピュータサイエンスにおいて、ロックコンボイとは、マルチスレッドアプリケーションで並行性制御のためにロックを使用する際に発生する可能性のあるパフォーマンス上の問題のことである。
ロックコンボイは、同じ優先度の複数のスレッドが同じロックを繰り返し競合するときに発生します。[ 1 ] [ 2 ]デッドロックやライブロックとは異なり、ロックコンボイ内のスレッドは進行しますが、スレッドがロックを取得しようとして失敗するたびに、残りのスケジューリングクォンタムを放棄し、コンテキストスイッチが強制されます。繰り返されるコンテキストスイッチのオーバーヘッドとスケジューリングクォンタの低利用により、全体的なパフォーマンスが低下します。
ロックコンボイは、交通渋滞に見舞われた高速道路で形成され、解消される自動車コンボイ(「広範囲にわたる移動渋滞」)と同様の挙動を示します。[ 3 ]道路が処理できる台数よりも多くの車が道路を走行すると、最終的に1台の車が停止しなければなりません。その直後に来る車も次々と停止し、コンボイが形成されます。コンボイの先頭の車が再び動き出すことができるようになっても、コンボイの最後尾ではまだ新しい車が停止しています。コンボイの先頭の車は前進できますが、コンボイ内のすべての車は再び前進できるようになるまで列に並んで待たなければなりません。
ロックコンボイは、ロックなどの並行制御プリミティブが、メモリヒープやスレッドプールといった共通リソースへのアクセスを直列化する際に発生することが多い。ロックフリーアルゴリズムなどの非ロック的な代替手段を使用したり、競合するスレッドの相対的な優先度を変更したりすることで、対処できる場合がある。