Come si chiama quando i thread sono in attesa ma non bloccati

4

La definizione di un deadlock è quando due o più thread non possono completare la loro esecuzione perché sono reciprocamente bloccati e in attesa di qualcosa dagli altri thread.

C'è un termine simile per quando due o più thread impiegano molto tempo per finire, piuttosto che non finire mai, perché stanno aspettando il completamento di un altro thread?

    
posta Ian Newson 14.12.2015 - 16:16
fonte

2 risposte

9

Il termine per questo tipo di comportamento è Sincronizzazione thread. A volte viene anche chiamato serializzazione perché i thread devono entrare in linea e passare quel pezzo di codice in serie.

Contesa della serratura è una dimensione che può essere utilizzata per misurare e prevedere le prestazioni di un pezzo di codice che richiede la sincronizzazione dei thread. Se 8 thread stanno contendendo per un lock contro 4 thread, ciò indica quanto lentamente le tue richieste stanno per essere completate, per esempio.

Thread Starvation è ciò che accade quando tutti i thread sono occupati, ma arrivano nuove richieste e non ci sono thread per soddisfare tali richieste. La fame di thread può essere un effetto collaterale della contesa, ma puoi avere un sistema altamente controverso che blocca tutto in threading singolo senza problemi di thread in base alle dimensioni del pool di thread o al numero di richieste di lavoro in arrivo.

Quindi, in breve, quando si hanno più thread che si contendono per una singola cosa, si dice che quei thread siano sincronizzati o serializzati in alcune parlate.

Ulteriori letture
Blocco contesa su Wikipedia
Starvation su Wikipedia

    
risposta data 14.12.2015 - 22:20
fonte
0

Su molti sistemi operativi, è possibile bloccare un mutex con un timeout. Il timeout è in genere infinito (nessun timeout) o zero (controllare se un mutex è bloccato o meno). Ovviamente potrei avere un mutex con un timeout di 12 ore, quindi un "deadlock" bloccherebbe l'applicazione per 12 ore senza fare nulla e poi il deadlock si fermerà.

D'altro canto, se provo ad acquisire un mutex, e qualcun altro lo tiene, lavorando per dodici ore, potrebbe non essere ottimale, ma su un singolo core non potrebbe nemmeno perdere tempo. Ovviamente non è un punto morto - penso di aver sentito il termine "livelock" per questo, in cui un thread è bloccato per un lungo periodo, ma l'applicazione nel suo complesso fa davvero buoni progressi.

    
risposta data 14.12.2015 - 22:45
fonte

Leggi altre domande sui tag