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 |