Sobes.tech
Junior

O que são threads no contexto da programação?

sobes.tech IA

Resposta da IA

Thread (fio) — é a menor unidade de execução num sistema operativo multitarefa. É a forma como um programa pode realizar várias tarefas simultaneamente dentro de um mesmo processo.

Características principais:

  • Partilha de recursos: Os threads num mesmo processo partilham o espaço de endereçamento, memória e outros recursos do processo.
  • Custos menores de sobrecarga: Criar um novo thread requer menos recursos (tempo e memória) do que criar um novo processo.
  • Execução paralela/concorrente: Os threads permitem alcançar paralelismo (em processadores multinúcleo) ou concorrência (em processadores de núcleo único).
  • Risco de condições de corrida: Como os threads partilham memória, há risco de conflitos ao acederem simultaneamente a dados partilhados. São necessários mecanismos de sincronização (mutexes, semáforos).

No Flutter, é utilizado um modelo de execução de UI de um único thread, onde o thread principal (UI thread) processa toda a renderização, eventos de entrada e animações. Cálculos pesados são realizados em isolados (isolates), que são processos separados com a sua própria memória, interagindo através de portas de mensagens.

// Exemplo de criação de um isolado separado no Flutter para realizar cálculos pesados
import 'dart:isolate';

Future<void> heavyComputation(SendPort sendPort) async {
  // Cálculos...
  int result = 0;
  for (int i = 0; i < 1000000000; i++) {
    result += i;
  }
  sendPort.send(result); // Enviamos o resultado de volta
}

void main() async {
  final receivePort = ReceivePort();
  // Criação do isolado e envio do porto para enviar resultados
  await Isolate.spawn(heavyComputation, receivePort.sendPort);

  receivePort.listen((message) {
    print('Cálculo terminado com resultado: $message');
    receivePort.close(); // Fechamos o porto após receber o resultado
  });

  print('Cálculo iniciado num isolado separado...');
}

Diferenças entre processos e threads:

Característica Processo Thread
Espaço de endereçamento Independente para cada processo Compartilhado entre threads no mesmo processo
Recursos Diferentes Partilhados
Criação Caro (grandes custos de sobrecarga) Barato (menores custos de sobrecarga)
Comunicação Mais complexa (IPC - Comunicação entre processos) Mais simples (acesso à memória partilhada)
Tolerância a falhas Queda de um processo não afeta os outros Queda de um thread pode afetar o processo