Con algoritmos paralelos tocando a la puerta, podría ser un buen momento para pensar en el manejo de errores.
Así que al principio había códigos de error. Esos apestaron. Era gratis ignorarlos, por lo que podría fallar tarde y producir código difícil de depurar.
Luego vinieron las excepciones. Se hizo imposible ignorarlos una vez que ocurrieron, y la mayoría de las personas (excepto Joel) les gustan más.
Y ahora tenemos bibliotecas que ayudan al código paralelo. El problema es que no puede manejar excepciones en código paralelo tan fácilmente como lo haría con código no paralelo. Si inicia una tarea de forma asincrónica y arroja una excepción, no hay rastro de pila más allá para desenrollarla; lo mejor que puede hacer es capturarlo y registrarlo en el objeto de la tarea, si existe tal objeto. Sin embargo, derrota la fuerza principal de las excepciones: debe verificarlas y puede ignorarlas sin ningún esfuerzo adicional , mientras que en el código de un solo subproceso una excepción necesariamente desencadenará las acciones apropiadas (incluso si eso significa terminar su programa).
¿Cómo deberían las implementaciones de lenguaje o las bibliotecas admitir errores en código paralelo?
Respuestas:
Me gustan mucho las devoluciones de llamada por errores que se pueden manejar. Y se puede hacer que funcionen bien asincrónicamente ...
Pero para errores que no se pueden manejar, errores verdaderamente excepcionales , prefiero ver la información relevante guardada y el programa finalizado. Dado que esto generalmente se logra a través de algún tipo de controlador de errores global de todos modos, no veo la necesidad de convertir las excepciones en algo que funcione para esto, pero sería mejor un mejor soporte de plataforma para detectar errores críticos y producir volcados de memoria, etc.
fuente
Parece que querrás asegurarte de que la tarea maneje sus propias excepciones, y luego devolver algo que le permita al programa de llamadas saber que el hilo debe cerrarse. Entonces tendría lógica procesar el resultado de todos los hilos, sabiendo que algunos de esos hilos habían fallado.
fuente