¿Qué problema resuelven los virtual threads (Java 21)?
Opciones
- Hacen que el código intensivo en CPU vaya más rápido con más núcleos
- Código bloqueante simple que escala a cantidades enormes de tareas (Opción correcta)
- Reemplazan el garbage collector por uno más barato
- Eliminan la necesidad de sincronizar el código compartido
Respuesta
Permiten escribir código bloqueante simple y gestionar cientos de miles de tareas concurrentes, porque son muy baratos y los planifica la JVM, no el sistema operativo
Por qué
Un thread normal (de plataforma) se corresponde 1:1 con un thread del sistema operativo y es costoso, así que un servidor solo puede tener unos pocos miles. Cuando un thread espera I/O (base de datos, HTTP), simplemente se queda ahí ocupando su sitio.
Los virtual threads son threads ligeros gestionados por la JVM. Cuando uno se bloquea en I/O, la JVM lo aparca y ejecuta otro en el mismo thread del sistema operativo. Puedes crear millones.
Ayudan con cargas I/O-bound (los servicios web típicos). NO aceleran el trabajo CPU-bound, y sigues teniendo que proteger los datos compartidos.
try (var ex = Executors.newVirtualThreadPerTaskExecutor()) {
ex.submit(() -> callSlowService());
}Recuerda
Virtual threads = bloqueo barato para servidores con mucho I/O.