Cómo curl 8.20.0 resolvió los hilos en DNS: El secreto del pooling de recursos

Cómo curl 8.20.0 resolvió los hilos en DNS: El secreto del pooling de recursos

May 01, 2026 curl dns resolution threading performance optimization system architecture open source development

El problema de los hilos en DNS que nadie menciona

Imagina curl lidiando con docenas de consultas DNS al mismo tiempo. ¿Qué pasa en segundo plano? Te sorprenderá lo que descubres.

Antes, el resolvedor con hilos de curl hacía esto: por cada conexión paralela, creaba un hilo nuevo y un socketpair (o eventfd en Linux) para manejar los resultados. ¿Ineficiente? Completamente.

Con pocas transferencias, no notabas nada. Pero en apps empresariales con miles de conexiones simultáneas, el caos aparecía. Cada hilo comía memoria, CPU y recursos del SO. Cada socketpair sumaba descriptores de archivos. Multiplica por miles de easy handles y tienes un desastre que escalaba linealmente.

Peor aún: si una resolución DNS se colgaba, bloqueaba toda la limpieza. ¿Quitar un easy handle con su hilo atascado? Deadlock total en tu app.

El parche viejo (y sus fallos)

El equipo de curl tenía un truco: CURLOPT_QUICK_EXIT. Lo activabas y los hilos se desprendían en vez de unirse. Ideal si tu app cerraba. Pero si seguía corriendo, esos hilos fantasmas se acumulaban en memoria, devorando recursos hasta el final.

Pura chapuza.

Pool de hilos: la revolución de curl 8.20.0

La nueva versión de curl rompe con lo anterior e introduce pool de hilos a nivel de multi handle.

La arquitectura ahora es simple y potente:

Un solo pool por multi handle

Olvídate de un hilo por easy handle. Ahora hay un pool gestionado por multi handle que:

  • Lanza hilos según la demanda (sin preasignar)
  • Mata los inactivos tras inactividad
  • Encola las peticiones DNS entrantes
  • Devuelve resultados vía un mecanismo compartido
  • Reparte las resoluciones listas al easy handle correcto

Lo clave: solo un socketpair por multi handle, sin importar cuántas conexiones manejes. Adiós al derroche de descriptores en apps con cientos o miles de transferencias.

Tú mandas

Con CURLMOPT_RESOLVE_THREADS_MAX controlas el máximo de hilos resolvedores. Por defecto, 20. El equipo lo ajustará con feedback real.

No más recursos desbocados. ¿Quieres 5 hilos para ahorrar CPU? Listo. ¿50 para máxima velocidad? Tú decides.

Además, hay un CURLMOPT_QUICK_EXIT a nivel multi que maneja el cierre del pool. Úsalo al terminar el proceso sin esperar. Como los easy handles no tienen hilos propios, los quitas sin riesgos de bloqueos.

¿Resoluciones DNS tardías tras quitar un handle? Se descartan. Limpio y predecible.

Ganancia en rendimiento (casi siempre)

Más allá de ahorrar recursos, el pool acelera: muchas resoluciones usan hilos ya activos. Sin arranques, sin asignaciones repetidas, sin llamadas extras al sistema.

¿Notarás un salto brutal? Depende de tu app y máquina. Pero siempre gana: menos switches de contexto, latencia más estable.

La cruda realidad: código nuevo, bugs posibles

Es un cambio grande. Más código, más piezas, más rincones para fallos raros.

Los devs de curl confían en que no hay desastres, pero todo refactor trae sorpresas. Prueba la versión nueva en tu entorno.

Qué cambia para ti

Apps de alto rendimiento con miles de conexiones paralelas (scrapers web, pipelines de datos, descargadores distribuidos): curl 8.20.0+ reduce memoria, optimiza CPU y estabiliza recursos.

Sistemas embebidos o IoT: cada byte y ciclo cuenta. Menos hilos y descriptores marcan diferencia real.

Uso modesto: mejoras invisibles. Resoluciones un poco más rápidas, menos llamadas al sistema. Tu infra lo agradece.

El panorama general

Lo impresionante del proyecto DNS 2026 de curl (donde encaja este pool) es la ingeniería madura: detectan un problema, lo resuelven limpio, mantienen compatibilidad y añaden opciones nuevas. No rompen nada; mejoran todo.

Así trabaja el open source cuando priorizan rendimiento y recursos.


¿Ya probaste curl 8.20.0? ¿Actualizando tu infra? Cuéntame en comentarios tus experiencias. El equipo de curl usa ese feedback para pulir estas decisiones.

Read in other languages:

RU BG EL CS UZ TR SV FI RO PT PL NB NL HU IT FR DE DA ZH-HANS EN