Menu

Tradução

Português English Español Français

TParallel em Delphi: Paralelismo na Prática

Neste artigo, você aprenderá o que é paralelismo em Delphi, como funciona o TParallel, quando utilizá-lo, além de um exemplo prático completo, com explicação passo a passo, voltado para aplicações VCL no Delphi.

Representação visual do paralelismo em Delphi com tarefas executadas simultaneamente usando TParallel
Dois mundos em paralelo com uma ponte ao meio e uma mão completando a ponte.


Introdução

Com o avanço dos processadores multicore, aproveitar melhor o poder de processamento disponível tornou-se essencial para o desenvolvimento de aplicações modernas e performáticas. Em Delphi, uma das formas mais eficientes de explorar esse potencial é por meio do paralelismo, que permite executar múltiplas tarefas simultaneamente, reduzindo o tempo total de processamento e melhorando a experiência do usuário.

O TParallel, introduzido nas bibliotecas modernas do Delphi, fornece uma maneira simples e elegante de executar operações em paralelo, sem a complexidade tradicional do gerenciamento manual de threads. Neste artigo, você aprenderá o que é paralelismo em Delphi, como funciona o TParallel, quando utilizá-lo, além de um exemplo prático completo, com explicação passo a passo, voltado para aplicações VCL no Delphi.

O que é Paralelismo em Delphi?

Paralelismo é a capacidade de executar múltiplas tarefas ao mesmo tempo, utilizando mais de um núcleo do processador. Diferente da execução sequencial — onde uma tarefa só começa após a outra terminar — no paralelismo várias tarefas podem ser processadas simultaneamente.

Em Delphi, o paralelismo é amplamente utilizado para:

  • Processamento de grandes volumes de dados

  • Execução de cálculos complexos

  • Processamento em lote

  • Melhoria de desempenho em tarefas independentes

É importante diferenciar paralelismo de concorrência:

  • Paralelismo: tarefas executam realmente ao mesmo tempo (multicore)

  • Concorrência: tarefas alternam o uso do processador, mas não necessariamente ao mesmo tempo

O TParallel foi criado justamente para simplificar o uso do paralelismo, abstraindo o controle direto de threads.

O que é o TParallel?

O TParallel faz parte da Parallel Programming Library (PPL) do Delphi, localizada na unit:

Delphi

System.Threading
  

Ele oferece métodos prontos para executar laços e tarefas de forma paralela, como:

  • TParallel.For

  • TParallel.ForEach

  • TParallel.Invoke

Esses métodos distribuem automaticamente as tarefas entre as threads disponíveis, utilizando o Thread Pool do Delphi, sem que o desenvolvedor precise criar ou destruir threads manualmente.

Quando Utilizar o TParallel?

O uso do TParallel é indicado quando:

✔ As tarefas são independentes entre si
✔ Não há (ou há pouco) acesso a recursos compartilhados
✔ O processamento é pesado ou repetitivo
✔ O objetivo é reduzir tempo de execução

Evite usar TParallel quando:

  • As tarefas dependem fortemente umas das outras

  • Há muita sincronização de dados compartilhados

  • O processamento é muito rápido (overhead pode não compensar)

Exemplo Prático com TParallel em Delphi (VCL)

Cenário do exemplo

Vamos criar um exemplo simples e didático:

  • Processar uma lista de números

  • Simular um cálculo pesado

  • Executar o processamento em paralelo

  • Atualizar a interface gráfica ao final

👉 Não haverá compartilhamento de dados mutáveis, mantendo o exemplo seguro e ideal para iniciantes.

Estrutura da aplicação VCL

  • Crie um novo projeto VCL Forms Application no Delphi.
  • Adicione os seguintes componentes:
  • TButtonBtnProcessar

  • TMemoMemoLog

Código do exemplo

Delphi

uses
  System.Threading,
  System.SysUtils,
  System.Classes;

procedure TForm1.BtnProcessarClick(Sender: TObject);
var
  Numeros: TArray<Integer>;
  Resultado: TArray<Integer>;
  I: Integer;
begin
  MemoLog.Clear;

  // Inicializa o array de entrada
  SetLength(Numeros, 10);
  for I := 0 to High(Numeros) do
    Numeros[I] := I + 1;

  // Inicializa o array de saída
  SetLength(Resultado, Length(Numeros));

  // Processamento paralelo
  TParallel.For(0, High(Numeros),
    procedure(Index: Integer)
    begin
      // Simula processamento pesado
      Sleep(500);

      // Cálculo simples
      Resultado[Index] := Numeros[Index] * 2;
    end
  );

  // Atualiza a interface após o processamento
  for I := 0 to High(Resultado) do
    MemoLog.Lines.Add(
      Format('Resultado[%d] = %d', [I, Resultado[I]])
    );
end;
  

Explicação do Código – Passo a Passo

1️⃣ Preparação dos dados

Criamos dois arrays:

  • Numeros: dados de entrada

  • Resultado: dados processados

Cada índice é independente, o que torna o uso do paralelismo seguro.

2️⃣ Uso do TParallel.For

Delphi

TParallel.For(0, High(Numeros), procedure(Index: Integer)
  

Esse método:

  • Divide automaticamente o intervalo entre threads

  • Executa múltiplos índices ao mesmo tempo

  • Utiliza o Thread Pool do Delphi

O desenvolvedor não precisa se preocupar com criação ou destruição de threads.

3️⃣ Simulação de processamento pesado

Delphi

Sleep(500);
  

Esse atraso simula um cálculo complexo, tornando o ganho de desempenho perceptível ao usar paralelismo.

4️⃣ Escrita segura no array de saída

Cada thread escreve apenas no seu próprio índice:

Delphi

Resultado[Index] := Numeros[Index] * 2;
  

Isso evita condições de corrida e elimina a necessidade de sincronização.

5️⃣ Atualização da interface gráfica

A atualização da interface ocorre após o término do processamento paralelo, garantindo segurança na VCL, que não é thread-safe.

Veja a ilustração do projeto abaixo:

Ilustração Paralelismo em Delphi
Ilustração do projeto.

Código fonte do exemplo

Você pode fazer o download do exemplo do projeto através do repositório do github:

https://github.com/Gisele-de-Melo/TParallel

Vantagens do TParallel

✔ Código mais simples e legível
✔ Aproveitamento automático de múltiplos núcleos
✔ Menos código de infraestrutura
✔ Redução significativa do tempo de processamento
✔ Integração nativa com Delphi

Desvantagens e Cuidados

⚠ Overhead em tarefas muito pequenas
⚠ Não indicado para lógica fortemente dependente
⚠ Interface gráfica não pode ser atualizada diretamente
⚠ Uso inadequado pode causar degradação de desempenho

Boas Práticas ao Utilizar TParallel

✔ Use para tarefas independentes
✔ Evite acessar variáveis globais
✔ Meça o ganho real de desempenho
✔ Prefira paralelismo para processamento pesado
✔ Mantenha a lógica simples

Quando NÃO Utilizar TParallel

  • Laços pequenos e rápidos

  • Processos sequenciais

  • Código que exige ordem estrita de execução

  • Operações com alto custo de sincronização

Conclusão

O TParallel é uma ferramenta poderosa e acessível para explorar o paralelismo em Delphi, especialmente em aplicações modernas que exigem alto desempenho. Quando utilizado corretamente, ele permite ganhos expressivos de performance com um código limpo, organizado e fácil de manter.

Neste artigo, você aprendeu o que é paralelismo em Delphi, como funciona o TParallel, quando utilizá-lo, além de um exemplo prático completo em aplicações VCL no Delphi 11. Em conteúdos futuros, será possível avançar ainda mais, explorando cenários com sincronização, controle de acesso e comunicação entre tarefas.

Posts Relacionados

Nenhum comentário:

Postar um comentário

TParallel em Delphi: Paralelismo na Prática

Neste artigo, você aprenderá o que é paralelismo em Delphi, como funciona o TParallel, quando utilizá-lo, além de um exemplo prático comp...