Quale sarebbe il modo migliore per gestire gli errori nei programmi paralleli?

10

Con algoritmi paralleli che bussano alla porta, potrebbe essere un buon momento per pensare alla gestione degli errori.

Quindi all'inizio c'erano i codici di errore. Quelli succhiati Era libero di ignorarli, quindi potresti fallire fino a tardi e produrre codice difficile da correggere.

Poi sono arrivate le eccezioni. Quelli sono stati resi impossibili da ignorare una volta che si sono verificati, e la maggior parte delle persone (tranne Joel) li gradisce meglio.

E ora abbiamo librerie che aiutano il codice parallelo. Il problema è che non puoi gestire le eccezioni nel codice parallelo con la stessa facilità con il codice non parallelo. Se si avvia in modo asincrono un'attività e si genera un'eccezione, non vi è traccia di stack che la trascini per rilassarsi; il meglio che puoi fare è catturarlo e registrarlo sull'oggetto compito, se c'è un tale oggetto. Tuttavia, sconfigge la forza principale delle eccezioni: devi controllarle e puoi ignorarle senza ulteriore sforzo , mentre nel codice a thread singolo un'eccezione attiverà necessariamente le azioni appropriate (anche se significa terminare il tuo programma).

In che modo le implementazioni linguistiche o le librerie supportano errori nel codice parallelo?

    
posta zneak 15.09.2010 - 01:12
fonte

2 risposte

2

Sono piuttosto appassionato di callback per errori che possono essere gestiti. E possono essere fatti funzionare bene in modo asincrono ...

Ma per errori che non possono essere gestiti, errori eccezionali , preferirei vedere le informazioni rilevanti salvate e il programma terminato. Dal momento che questo è in genere eseguito tramite una sorta di gestore di errori globale, tuttavia, non vedo la necessità di modificare le eccezioni in qualcosa che funzioni per questo - ma meglio piattaforma per rilevare errori critici e produrre dump di memoria, ecc. sarebbe bello.

    
risposta data 15.09.2010 - 17:26
fonte
-2

Sembra che vorresti essere sicuro che l'attività gestisca le proprie eccezioni, e quindi restituire qualcosa che permetta al programma chiamante di sapere che il thread deve essere spento. Avrebbe quindi la logica per elaborare il risultato di tutti i thread, sapendo che alcuni di questi thread avevano fallito.

    
risposta data 15.09.2010 - 01:34
fonte

Leggi altre domande sui tag