Desarrollador Node.js: pregunta de entrevista

¿Cuándo usas worker threads de Node.js?

Usa worker threads para JavaScript intensivo en CPU que bloquearía el event loop. Mantén el pool acotado e incluye coste de serialización y coordinación; la E/S asíncrona normal no los necesita.

Respuesta directa

Qué debe cubrir una buena respuesta

Cómo funciona

Los worker threads ejecutan JavaScript en paralelo dentro de un proceso, cada uno con su propio event loop e isolate de V8, comunicándose por paso de mensajes o SharedArrayBuffer. Existen para trabajo limitado por CPU que de otro modo bloquearía el loop principal: procesamiento de imágenes, generación de PDF, parseo pesado, compresión en JavaScript y trabajo criptográfico no cubierto por las APIs asíncronas nativas. Como los mensajes se clonan estructuradamente, enviar objetos grandes cuesta tiempo; un pool de tamaño fijo cercano al número de núcleos evita crear un hilo por solicitud, y el trabajo de E/S no gana nada con workers.

Ejemplo

Un endpoint de informes que renderizaba un PDF de 40 páginas tardaba 2 s de CPU pura y bloqueaba todas las demás solicitudes; mover el renderizado a un pool de cuatro workers con piscina mantuvo la API responsiva y permitió cuatro informes en paralelo. Una solicitud que solo espera tres consultas a base de datos se dejó en el hilo principal porque un worker añadiría coste de serialización sin beneficio.

Errores frecuentes

  • Crear un worker nuevo por cada solicitud en lugar de usar un pool.
  • Usar workers para llamadas a base de datos y añadir sobrecarga sin paralelismo.
  • Pasar objetos enormes por mensaje y gastar más tiempo clonando que calculando.

Una estructura útil para responder

Responde desde tu propia experiencia.

No memorices un guion: usa solo ejemplos que puedas explicar con honestidad en preguntas posteriores.

Practica esta respuesta con MiraHint

Abre el espacio de trabajo de escritorio y ensaya una respuesta clara con tus propias palabras.

Descargar MiraHint
Preguntas de entrevista para Desarrollador Node.js