Sua aplicação Delphi congela em operações demoradas?
Você sente que não está aproveitando todo o poder dos processadores multi-core modernos? É hora de dominar a programação concorrente e o paralelismo.
Este livro é um guia prático e completo, escrito por um Embarcadero MVP com quase 30 anos de experiência. Do básico da TThread à elegância da Parallel Programming Library (PPL), você aprenderá a construir aplicações robustas, evitar os temidos "UI Freezes", e resolver problemas complexos como race conditions e deadlocks.
Com quase 550 páginas, esta é uma formação completa que te leva do zero ao nível profissional. Prepare-se para transformar suas aplicações desktop, mobile, web e cloud entregando a performance e a fluidez que seus usuários esperam.
Para Quem é Este Livro?
Para o Desenvolvedor Iniciante
Se você está começando com threads, este livro é o seu guia. Aprenda os fundamentos de forma clara, com exemplos passo a passo, e construa uma base sólida para evitar os erros mais comuns.
Para o Desenvolvedor Experiente
Eleve suas habilidades a um novo patamar. Aprofunde-se em primitivas de sincronização, domine a PPL, e aprenda a aplicar padrões de arquitetura avançados para criar aplicações mais robustas e escaláveis.
Para o Arquiteto de Software
Projete sistemas de alta performance. Entenda as nuances do gerenciamento de memória, as particularidades do desenvolvimento mobile e os padrões de resiliência essenciais para sistemas críticos.
O que Você Vai Dominar com Este Livro
- Acabar com o "UI Freeze": Aprenda a aplicar os padrões corretos para manter suas aplicações VCL e FMX 100% responsivas, delegando tarefas demoradas para o segundo plano de forma segura.
- Prevenir Erros de Concorrência: Domine as primitivas de sincronização (TCriticalSection, TEvent, TMonitor) para proteger dados compartilhados e evitar os temidos deadlocks e race conditions.
- Escolher a Ferramenta Certa: Entenda de uma vez por todas quando usar a TThread clássica e quando aproveitar o poder da moderna Parallel Programming Library (PPL) com TTask e TParallel.For.
- Construir Arquiteturas Profissionais: Vá além do código e aprenda a projetar sistemas concorrentes robustos e de fácil manutenção, aplicando padrões como Repository, Factory, Injeção de Dependência e Máquinas de Estado.
- Conquistar o Mobile: Domine as particularidades da concorrência no Android e iOS, aprendendo a evitar ANRs, processar imagens da galeria e consumir APIs em paralelo sem impactar a experiência do usuário.
Sumário Completo
1: Introdução ao Processamento Concorrente e Assíncrono
- 1.1 - O Problema do Congelamento da Interface (UI Freeze)
- 1.2 - O que é Processamento Concorrente e Assíncrono?
- 1.3 - Uma Breve História da Concorrência: Da TThread à PPL
- 1.4 - Os Verdadeiros Objetivos da Concorrência
- 1.5 - O Conceito de Thread
- 1.6 - Quando NÃO usar Threads (e buscar alternativas)
2: Fundamentos de Threads em Delphi (TThread básico)
- 2.1 - Criando e Gerenciando Threads Simples
- 2.2 - Comunicando com a Thread Principal (Synchronize e Queue)
- 2.3 - Lidando com Múltiplas Threads e Dados Compartilhados
- 2.4 - Threads Anônimas (TThread.CreateAnonymousThread)
3: Sincronização de Threads
- 3.1 - TCriticalSection - Aprofundando na Exclusão Mútua Simples
- 3.2 - TMonitor - Sincronização de Múltiplas Threads
- 3.3 - TMutex - Sincronização entre Processos
- 3.4 - TSemaphore - Controle de Acesso a Recursos Limitados
- 3.5 - TEvent - Sinalização entre Threads
- 3.6 - Otimizando Acesso Concorrente: O Padrão Leitores-Escritores
- 3.7 - TCountdownEvent - Sincronizando a Conclusão de Múltiplas Tarefas
- 3.8 - WaitForMultipleObjects: Espera Coordenada
4: Gerenciamento e Cancelamento de Threads
- 4.1 - Início e Pausa Controlada de Threads
- 4.2 - Cancelamento Gentil de Threads (Terminate e WaitFor)
- 4.3 - Cancelamento Cooperativo com TCancellationToken
- 4.4 - Gerenciando a Prioridade de Execução (TThread.Priority)
- 4.5 - Tratamento de Exceções em Threads
- 4.6 - Estratégias de Reprocessamento e Retry em Threads
5: Alternativas Assíncronas
- 5.1 - PostMessage e SendMessage
- 5.2 - I/O Assíncrono (Visão Geral)
- 5.3 - Integração de I/O Assíncrono com Threads
- 5.4 - Padrão de Execução Assíncrona na Main Thread
- 5.5 - Comunicação via System.Messaging
6: Parallel Programming Library (PPL)
- 6.1 - Introdução à PPL - O Salto para a Programação Baseada em Tarefas
- 6.2 - O Coração da PPL: ITask para Ações e IFuture<T> para Resultados
- 6.3 - TParallel.For - Paralelizando Loops
- 6.4 - Coordenação de Tarefas (WaitForAll, WaitForAny)
- 6.5 - Cancelamento de Tarefas PPL
- 6.6 - Outros Recursos da PPL: TParallelArray
7: Tópicos Avançados em Threads
- 7.1 - Criando um Thread Pool Personalizado
- 7.2 - TInterlocked - Operações Atômicas para Performance Extrema
- 7.3 - Gerenciamento de Memória e Multithreading
- 7.4 - Gerenciamento Avançado da PPL
- 7.5 - Sincronização Condicional: TConditionVariableCS
8: Melhores Práticas e Depuração
- 8.1 - Organização do Código
- 8.2 - Evitando Concorrência com threadvar
- 8.3 - Dados Compartilhados e Coleções Thread-Safe
- 8.4 - Prevenção de Deadlocks e Race Conditions
- 8.5 - Técnicas para Minimizar Trocas de Contexto
- 8.6 - Depuração de Aplicações Multithreaded
- 8.7 - Problemas Comuns e Como Resolvê-los
- 8.8 - Recomendações Finais e Conclusões
9: Threads em Aplicações Mobile (Android e iOS)
- 9.1 - Introdução à Concorrência em Mobile
- 9.2 - Prevenção de ANRs no Android
- 9.3 - Concorrência no iOS: Regras e APIs
- 9.4 - Cuidados Específicos de Cada Plataforma
- 9.5 - Evolução dos Recursos para Threads Mobile
- 9.6 - Requisições REST Paralelas
- 9.7 - Lendo e Processando Imagens da Galeria
- 9.8 - Processamento em Lote para Máxima Velocidade
- 9.9 - Recomendações Finais para Mobile
10: Exemplos Úteis com PPL
- 10.1 - Processamento Paralelo de Múltiplos Arquivos
- 10.2 - Requisições de Rede Assíncronas com Paginação
- 10.3 - Simulações e Cálculos Intensivos
- 10.4 - Orquestração de Fluxos de Trabalho Complexos
- 10.5 - Pipeline de Tarefas com Máquina de Estado
11: Aplicações Práticas de Banco de Dados
- 11.1 - Os Princípios Inegociáveis (A Doutrina)
- 11.2 - Exemplo Essencial: TDataModule em uma TThread
- 11.3 - Otimização com Connection Pooling do FireDAC
- 11.4 - Alternativa Sem Threads: Execução Assíncrona (amAsync)
- 11.5 - Arquitetura Concorrente Completa com PPL
- 11.6 - Considerações Específicas para DBExpress
Apêndice
- Apêndice A: Guia Rápido das Primitivas de Sincronização