Sí, si el trabajo es E/S bloqueante y no intensivo en CPU. Cambia el servidor y cualquier executor de tareas a un executor de un hilo virtual por tarea, y luego quita los supuestos que te daba el pool viejo: añade límites explícitos de concurrencia downstream con semáforos o pools de conexiones, audita los bloques synchronized y las llamadas nativas que pueden hacer pinning de un portador, y revisa el uso de thread locals. Despliégalo tras un flag y compara rendimiento y latencia de cola.
Por qué lo preguntan los entrevistadores
Esta es la versión práctica de la pregunta sobre hilos virtuales, y expone si entiendes lo que un pool acotado hacía por ti en silencio. El entrevistador quiere el punto del límite de concurrencia, la auditoría de pinning y un despliegue medido en vez de un cambio global. Reconocer que los servicios intensivos en CPU no ganan nada demuestra que no lo tratas como una mejora mágica.
Cómo estructurar tu respuesta
- Matiza la decisión: E/S bloqueante sí, intensivo en CPU no.
- Sustituye el executor y la configuración de hilos del servidor.
- Restaura los límites explícitos que el pool viejo daba de forma implícita.
- Audita el pinning y el código con muchos thread locals, y luego mide.
Ejemplo de respuesta
Si los hilos están sobre todo parados esperando HTTP o base de datos, sí, porque doscientos hilos son también doscientas peticiones concurrentes, y todo lo demás hace cola detrás. El cambio en sí es pequeño: ejecutar el servidor web sobre hilos virtuales y cambiar los executors de tareas por uno que cree un hilo virtual por tarea. El trabajo está en lo que el pool hacía de forma implícita. Era un límite de concurrencia, así que en cuanto desaparece puedo tener de golpe diez mil peticiones golpeando una base de datos con un pool de cincuenta conexiones, y en vez de una cola en el pool de hilos me salen timeouts en el pool de conexiones. Así que devuelvo los límites explícitos a donde corresponden, normalmente un semáforo por dependencia downstream dimensionado a conciencia. Luego audito el pinning, que es mucho menos problema en las versiones recientes ya que synchronized ya no hace pinning, pero las llamadas nativas sí. También reviso si hay thread locals guardando algo grande, porque las cachés por hilo que estaban bien con doscientos hilos no lo están con cien mil. Después subo tráfico tras un flag y vigilo la latencia de cola, no solo el rendimiento.
¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.
Mira cómo funcionaPreguntas de seguimiento que puedes esperar
- ¿Cómo detectas el pinning en una aplicación en ejecución?
- ¿Qué sustituye a un thread local cuando tienes un millón de hilos?
- ¿Cómo dimensionarías el semáforo para un servicio downstream?
Más preguntas para Desarrollador Java
Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.
Predecir mis preguntas