# Isolates y Concurrencia en Dart
A diferencia de Java o C++, Dart no tiene "hilos" (threads) de memoria compartida. En su lugar, utiliza **Isolates**.
## ¿Qué es un Isolate?
Un Isolate es un espacio de ejecución aislado con:
- Su propio Event Loop.
- Su propia memoria (Heap).
- Su propio Stack.
**Importante:** Los Isolates **NO comparten memoria**. Para comunicarse, deben enviarse mensajes.
## ¿Cuándo usar Isolates?
Usa Isolates cuando tengas tareas que requieran mucho uso de CPU (CPU-bound) y que duren lo suficiente como para causar "jank" (tirones) en la UI (generalmente > 16ms).
Ejemplos:
- Procesamiento de imágenes (filtros, redimensionado).
- Parsing de JSON muy grandes (> 1MB).
- Cifrado/Descifrado de datos.
- Cálculos matemáticos complejos.
## `Isolate.run` (Dart 2.19+)
La forma más moderna y sencilla de ejecutar código en otro isolate.
```dart
import 'dart:isolate';
// Función pesada (debe ser estática o top-level)
int fibonacci(int n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
void main() async {
print('Iniciando cálculo...');
// Ejecuta fibonacci(40) en otro isolate y devuelve el resultado
// El hilo principal NO se bloquea
final resultado = await Isolate.run(() => fibonacci(40));
print('Resultado: $resultado');
}
```
## `compute` en Flutter
En Flutter, a menudo usamos la función `compute`, que es un wrapper conveniente sobre Isolates.
```dart
import 'package:flutter/foundation.dart';
// Parsing JSON pesado
List
parseUsers(String responseBody) {
final parsed = jsonDecode(responseBody).cast