Capítulo 4. Concorrência estruturada
Este trabalho foi traduzido com recurso a IA. Agradecemos o teu feedback e comentários: translation-feedback@oreilly.com
A simplicidade é um pré-requisito para a confiabilidade.
Edsger W. Dijkstra
Em nossos capítulos anteriores, vimos como os threads virtuais abrem um mundo de possibilidades, permitindo que você lide com tarefas de bloqueio na simultaneidade em Java. Com milhares de threads virtuais leves capazes de gerar sem sobrecarga significativa, as chamadas de bloqueio não são mais uma preocupação. No entanto, um problema crítico ainda precisa ser resolvido: gerenciar as relações e dependências entre as tarefas quando elas são divididas e distribuídas em vários threads.
Imagine um cenário em que uma tarefa principal tem várias subtarefas dependentes, cada uma executada em uma thread diferente. Se a tarefa principal for encerrada inesperadamente, suas subtarefas continuarão a ser executadas de forma independente. Os resultados dessas subtarefas tornam-se irrelevantes, mas elas ainda consomem recursos.
Além disso, se a tarefa principal precisar ser concluída somente quando todas as suas subtarefas estiverem concluídas, qualquer falha entre as subtarefas deve, idealmente, levar ao cancelamento de toda a operação. Essa falta de coordenação pode levar a várias threads órfãs. Esses threads órfãos esgotarão o valioso tempo de memória e do processador, realizando trabalho desnecessário. Muitas vezes, essas ineficiências envolvem custos consideráveis. ...