Ho letto molti siti web che parlano di come evitare e come progettare, ecc. Capisco perfettamente queste strategie.
La mia domanda si basa sulle seguenti precondizioni:
- Hai un'azienda con migliaia di sviluppatori.
- Ci sono diversi team che lavorano sullo stesso prodotto ma come moduli.
- I nuovi sviluppatori che scrivono un nuovo codice non conoscono il sistema generale, prendi in considerazione un'applicazione Enterprise.
- Sviluppo software disponibile elevato in cui un downtime di 15 minuti è considerato una violazione SLA.
Potrei scrivere qualche precondizione in più, ma ho pensato che questi potrebbero essere abbastanza forti da supportare la mia domanda sul perché potrei aver bisogno di una strategia di recupero per un "deadlock" in un software.
Tieni presente che riprogettare i moduli ogni volta che troviamo un deadlock non è realistico.
Detto questo.
Qualcuno può prendersi un tempo per fornire un input o un brainstorming su un'idea di come risolvere un deadlock se ciò accade, in modo che possiamo segnalarlo e andare avanti, invece di fermarci completamente.
- Esegui un rilevatore di deadlock che viene eseguito periodicamente per cercare deadlock nel sistema.
- Se viene rilevato un deadlock, notifica con un evento per risolvere il deadlock.
- Il listener di eventi deadlock si aprirà e agirà sui thread bloccati.
- Per ogni thread identifica la contesa.
- Scrivi un algoritmo intelligente che può rilasciare i blocchi e uccidere il thread o rilasciare i blocchi e rivalutare il thread.
- Nel passaggio 2 gestiamo la notifica in diversi modi, tra i quali la registrazione è uno dei listener.
So come andare sui passi 1,2,6. Avrà bisogno di aiuto con 3,4 e 5.
So che Oracle RDBMS ha già una strategia di rilevamento e risoluzione dei deadlock, mi chiedo se mai condivideranno le loro strategie in questo thread:)
Impossibile aggiungere il mio commento come risposta, quindi aggiungendolo come commento qui.
=============================================== ==================
Comprendo completamente il rischio di uccidere i thread. Ero sicuro al 100% che avrei avuto risposte come questa, ma speravo anche che qualcuno suggerisse qualcosa di nuovo. Terrò il filo aperto perché non c'è una risposta qui che già non lo so, grazie mille per aver provato comunque.