Delphi Multithreading (Edição em Português)
Writed by : Cesar Romero
Published date : 17/10/2025
ISBN-10 : 6501752515
ISBN-13 : 9786501752518
Language : Portugués
Web site : https://www.cesarromero.com.br/index_pt.html
A interface travada durante uma operação demorada é o inimigo silencioso de qualquer aplicação moderna. No universo Delphi, dominar a programação concorrente é a chave para transformar aplicações lentas e frustrantes em sistemas fluidos, responsivos e profissionais. No entanto, o caminho do multithreading é frequentemente visto como um campo minado de deadlocks, race conditions e complexidades que intimidam até os desenvolvedores mais experientes.
Este livro é o mapa definitivo para essa jornada. Com base em 30 anos de experiência em arquitetura de software, Cesar Romero desmistifica a concorrência em Delphi, guiando o leitor desde os fundamentos da TThread clássica até a maestria da moderna Parallel Programming Library (PPL). Escrita com uma didática focada no “porquê” por trás de cada decisão, esta obra foi projetada para ser um curso de formação completo, tanto para o programador que está dando seus primeiros passos em threads quanto para o arquiteto que busca otimizar a performance em cenários de alta demanda.
Ao longo de seus capítulos práticos, você aprenderá a:
- Gerenciar o ciclo de vida de threads de forma segura, evitando os erros mais comuns.
- Dominar as primitivas de sincronização, escolhendo a ferramenta certa para cada desafio.
- Simplificar seu código e aproveitar ao máximo os processadores multi-core com TTask, IFuture e TParallel.For.
- Diagnosticar e depurar os problemas mais complexos de concorrência.
- Aplicar as melhores práticas em exemplos do mundo real, incluindo o acesso concorrente a bancos de dados e o desenvolvimento de aplicações mobile fluidas para Android e iOS.
Ao final desta obra, você não terá apenas um repertório de código, mas a confiança e a visão arquitetural para projetar e construir aplicações Delphi que não apenas funcionam, mas que encantam o usuário com sua performance e responsividade.
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: Responsividade, Escalabilidade e Performance
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 (Introdução à Sincronização)
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 com um Único Objeto
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 em Múltiplos Eventos
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 (PostMessage / SendMessage, I/O Assíncrono)
5.1: PostMessage e SendMessage - Comunicação Assíncrona e Síncrona via Mensagens Windows
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: O TMainThreadDispatcher
5.5: Comunicação entre Threads e Plataformas via System.Messaging
6: Parallel Programming Library (PPL) - Simplificando a Concorrência
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: TTask.WaitForAll, TTask.WaitForAny e TParallel.Join
6.5: Cancelamento de Tarefas PPL (ITask.Cancel e ITask.CheckCanceled)
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: TThreadPool e TThreadPoolStats
7.5: Sincronização Condicional: TConditionVariableCS
8: Melhores Práticas e Depuração
8.1: Organização do Código (Threads em Units Separadas)
8.2: Evitando Concorrência com threadvar (Thread-Local Storage)
8.3: Dados Compartilhados e Coleções Thread-Safe: Garantindo a Integridade em Aplicações Multithreaded
8.4: Prevenção de Problemas Comuns: Deadlocks e Race Conditions
8.5: Técnicas para Minimizar Trocas de Contexto (Context Switches)
8.6: Depuração de Aplicações Multithreaded
8.7: Problemas Comuns em Aplicações Multithreaded e Como Resolvê-los
8.8: Recomendações Finais e Conclusões para Melhores Práticas
9: Threads e Concorrência em Aplicações Mobile (Android e iOS)
9.1: Introdução à Concorrência em Aplicações Mobile
9.2: Particularidades da Thread da UI em Mobile e Prevenção de ANRs no Android
9.3: Concorrência no iOS: Regras e APIs Nativas
9.4: Cuidados Específicos de Cada Plataforma e Gestão de Ciclo de Vida
9.5: Evolução dos Recursos para Threads na Plataforma Mobile com Delphi
9.6: Requisições REST Paralelas para APIs Públicas
9.7: Lendo Imagens da Galeria de Fotos em uma Tarefa PPL
9.8: Processamento em Lote para Máxima Velocidade (Throughput)
9.9: Recomendações Finais para Concorrência Mobile
10: Exemplos Úteis com PPL
10.1: Processamento Paralelo de Múltiplos Arquivos em Lote
10.2: Requisições de Rede Assíncronas com Paginação
10.3: Simulações e Cálculos Intensivos de Dados em Paralelo
10.4: Orquestração de Fluxos de Trabalho Complexos com Dependências
10.5: Pipeline de Tarefas com Máquina de Estado
11: Aplicações Práticas de Banco de Dados com Concorrência
11.1: Os Princípios Inegociáveis: A Doutrina
11.2: Exemplo Prático Essencial: TDataModule em uma TThread
11.3: Otimização de Performance com Connection Pooling do FireDAC
11.4: Alternativa Sem Threads: Execução Assíncrona (amAsync) do FireDAC
11.5: Construindo uma Arquitetura Concorrente Completa com PPL, Banco de Dados e Padrões de Design
11.6: Considerações Específicas para DBExpress