Så fik curl 8.20.0 bugen med DNS-tråde: En dybdegående gennemgang af resource pooling

Så fik curl 8.20.0 bugen med DNS-tråde: En dybdegående gennemgang af resource pooling

Apr 29, 2026 curl dns resolution threading performance optimization system architecture open source development

DNS-tråd-problemet, ingen tager op

Har du nogensinde tænkt over, hvad der sker, når curl skal håndtere dusinvis af DNS-opslag på én gang? Det gamle system i curl skabte kaos med tråde.

Førhen startede curl en ny tråd til hver parallelle forbindelse. Plus en socketpair – eller eventfd på Linux – for at koordinere svar. Det lød simpelt, men var totalt ineffektivt.

Ved få overførsler mærkede du intet. Men i store applikationer med tusindvis af samtidige forbindelser? Hver tråd spiste hukommelse, CPU og systemressourcer. Socketpairs fyldte file descriptors op. Resultatet: lineær ressourceeksplosion.

Værre var det, hvis et DNS-svar hang. Så blokerede det hele oprydningen. Fjernede du en easy handle midt i det? Hele appen låste.

Den gamle løsning – og dens svagheder

Curl havde en midlertidig fix: CURLOPT_QUICK_EXIT. Den frigjorde tråde uden at vente. Fedt til apps, der lukkede ned. Men hvis din app kørte videre? Tråde hobede sig op i hukommelsen som zombier.

Det var ren nødlelsning.

Thread pooling revolutionerer det hele i curl 8.20.0

Nyeste curl-version dropper det gamle og indfører thread pooling på multi handle-niveau.

Her er den smarte nye model:

Én pool til hele multi handlet

I stedet for tråd pr. easy handle får du én håndteret pool pr. multi handle. Den:

  • Starter tråde efter behov – ingen spild
  • Lukker inaktive tråde automatisk
  • Køer DNS-forespørgsler
  • Sender svar via ét fælles system
  • Fordeler resultater til rettet easy handle

Nøglen? Kun én socketpair pr. multi handle, uanset antallet af parallelle jobs. Perfekt til apps med hundreder eller tusindvis af overførsler.

Du styrer selv

Ny option CURLMOPT_RESOLVE_THREADS_MAX lader dig sætte max antal resolver-tråde. Standard er 20, men det finpudses med feedback.

Ingen mere vild vækst i ressourcer. Vil du begrænse til 5 tråde for at spare CPU? Gør det. Har brug for 50 til max hastighed? Muligt.

Ny CURLMOPT_QUICK_EXIT på multi-niveau styrer poolens nedlukning. Brug det ved procesafslut – ingen ventetid. Easy handles ejer ikke længere egne tråde, så du fjerner dem sikkert. Svar der kommer for sent? Smidt væk. Rent og forudsigeligt.

Ydeevneboosten – mest på store skalaer

Udover besparelser kommer en ekstra gevinst: DNS-job kører ofte i eksisterende tråde. Ingen startup-omkostninger, færre allokeringer, mindre systemkald.

Stor hastighedsgevinst? Afhænger af din app og maskine. Men altid bedre: mindre kontekstskift, jævnere latency.

Ny kode betyder nye fejl

Dette er en kæmpe omstrukturering. Mere kode, flere dele, potentielle kanter.

Udviklerne tror ikke på katastrofer, men test selv i din setup. Store ændringer afslører bugs.

Hvad betyder det for dig?

Høj-throughput apps med tusindvis af parallelle forbindelser – som scrapere, datapipelines eller downloadere – får massiv opgradering i curl 8.20.0+. Lavere hukommelse, bedre CPU, stabilt ressourceforbrug.

Embedded eller IoT-systemer vinder på færre tråde og descriptors. Hver besparelse tæller.

Småskala brugere nyder usynlige forbedringer: hurtigere DNS, færre kald. Din infra takker dig.

Det store billede

Curls DNS 2026-projekt – hvor thread pooling er en stjerne – viser moden open source-ingeniørkunst. Problemet identificeret, elegant løsning, fuld bagudkompatibilitet plus nye knobs. Intet ødelagt, alt forbedret.

Sådan ser seriøs optimering ud.


Har du testet curl 8.20.0? Opdaterer du din infra? Smid en kommentar med dine oplevelser – curl-folket lytter til feedback og justerer.

Read in other languages:

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