web-dev-qa-db-ja.com

スレッドが待機しているがデッドロックされていない場合は何と呼ばれますか

デッドロックの定義は、2つ以上のスレッドが相互にブロックされ、他のスレッドからの何かを待っているために実行を完了できない場合です。

2つ以上のスレッドが、別のスレッドが完了するのを待っているために、終了しないのではなく、終了するのに長い時間がかかる場合の同様の用語はありますか?

4
Ian Newson

このタイプの動作の用語は、スレッド同期です。スレッドが一列に並んでそのコードをシリアルに処理する必要があるため、シリアル化とも呼ばれます。

Lock Contentionは、スレッドの同期を必要とするコードのパフォーマンスを測定および予測するために使用できるディメンションです。たとえば、8つのスレッドが4つのスレッドに対してロックを争っている場合、それはリクエストの完了がどれだけ遅いかを示しています。

Thread Starvationは、すべてのスレッドがビジーであるが、新しい要求が着信し、それらの要求を処理するスレッドがない場合に発生します。スレッドの枯渇は競合の副作用である可能性がありますが、スレッドプールのサイズや受信する作業要求の数によっては、スレッドの枯渇を起こさずにすべてを単一のスレッドにブロックする非常に競合の多いシステムを持つことができます。

つまり、1つのことをめぐって複数のスレッドが競合している場合、それらのスレッドは同期されている、または一部の用語ではシリアル化されていると言われます。

さらに読む
ウィキペディアでのロック競合
ウィキペディアの飢餓

9
Jimmy Hoffa

多くのオペレーティングシステムでは、タイムアウトを使用してミューテックスをロックすることができます。タイムアウトは通常、無限(タイムアウトなし)またはゼロ(ミューテックスがロックされているかどうかのチェック)のいずれかです。明らかに、12時間のタイムアウトでミューテックスを使用できるため、「デッドロック」は何もせずにアプリケーションを12時間ロックダウンし、その後デッドロックが停止します。

一方、ミューテックスを取得しようとして、他の誰かがそれを保持し、12時間懸命に働いている場合、それは最適ではないかもしれませんが、シングルコアマシンでは時間を無駄にしないかもしれません。もちろん、これはデッドロックではありません。「ライブロック」という用語を聞いたことがあると思います。この用語では、1つのスレッドが長期間ロックアウトされますが、アプリケーション全体は実際に順調に進んでいます。

0
gnasher729