Capítulo 4. La concurrencia estructurada
Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com
La simplicidad es un requisito previo para la fiabilidad.
Edsger W. Dijkstra
En nuestros capítulos anteriores, hemos visto cómo los hilos virtuales abren un mundo de posibilidades al permitirnos manejar tareas bloqueantes en la concurrencia de Java. Con miles de hilos virtuales ligeros capaces de generarse sin una sobrecarga significativa, las llamadas de bloqueo ya no son una preocupación. Sin embargo, todavía hay que abordar una cuestión crítica: la gestión de las relaciones y dependencias entre tareas cuando se descomponen y distribuyen entre varios hilos.
Imagina una situación en la que una tarea principal tiene varias subtareas dependientes, cada una de las cuales se ejecuta en un subproceso diferente. Si la tarea principal termina inesperadamente, sus subtareas siguen ejecutándose de forma independiente. Los resultados de estas subtareas se vuelven irrelevantes, pero siguen consumiendo recursos.
Además, si la tarea principal sólo debe completarse cuando todas sus subtareas hayan finalizado, lo ideal sería que cualquier fallo entre las subtareas provocara la cancelación de toda la operación. Esta falta de coordinación puede dar lugar a numerosos hilos huérfanos. Estos subprocesos huérfanos agotarán un valioso tiempo de memoria y de procesador realizando un trabajo innecesario. A menudo, estas ineficiencias suponen ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access