Så fixade curl 8.20.0 DNS-uppslag med trådar – djupdyk i resource pooling
DNS-trådproblemet som alla ignorerar
Tänk dig att curl hanterar tiotals DNS-uppslag samtidigt. Bakom kulisserna har det varit en resursfest – tills nu.
Före curl 8.20.0 skapades en ny tråd per parallel anslutning. Varje tråd öppnade en socketpair (eller eventfd på Linux) för att hantera svar. Vid småskalig användning märks det inte. Men vid tusentals samtidiga anslutningar? Då exploderar minne, CPU och filbeskrivartal. Varje tråd drar resurser linjärt med antalet handles.
Värre: ett hängande DNS-uppslag kunde blockera hela nedstängningen. Ta bort en easy handle medan tråden hängde? Dödslås.
Den gamla nödlösningen – och dess brister
CURLOPT_QUICK_EXIT var en quick fix. Trådar detacherades istället för att joinas. Bra vid appavslut. Men vid långvarig körning samlades de som spöken i minnet. En temporär lösning som aldrig löste grundproblemet.
Trådpooler förändrar spelet i curl 8.20.0
Nu slänger curl det gamla systemet. Istället får du trådpooler på multi handle-nivå.
Så funkar det nya:
En pool per multi handle
- Trådar startas vid behov, inga onödiga i förväg.
- Inaktiva trådar stängs av automatiskt.
- DNS-förfrågningar köas.
- Svar levereras via en gemensam kanal.
- Resultat routas till rätt easy handle.
Nyckeln: en enda socketpair per multi handle. Oavsett om du kör 10 eller 10 000 transfers. Filbeskrivarna krymper dramatiskt.
Du styr själv
CURLMOPT_RESOLVE_THREADS_MAX begränsar max antal resolver-trådar. Standard är 20, men curl-teamet vill ha feedback för justeringar.
Behöver du bara 5 trådar för att spara CPU? Sätt det. Vill du maxa till 50 för throughput? Möjligt.
Ny CURLMOPT_QUICK_EXIT på multi-nivå hanterar poolavslut. Ta bort handles säkert – inga blockerade joinar. Sena DNS-svar efter borttagning? Slängs bort. Rent och förutsägbart.
Prestandavinsterna
Utöver resursbesparingar körs många uppslag i befintliga trådar. Inga startkostnader. Mindre allokeringar. Färre systemanrop.
Stor skillnad? Beror på din app och hårdvara. Men alltid bättre: mindre switching, stabilare latens.
Ny kod, nya risker
Det här är en rejäl ombyggnad. Fler komponenter betyder fler kryphål för buggar.
Curl-utvecklarna tror sig ha täckt baserna. Men testa alltid i din miljö. Major changes biter ibland sent.
Vad betyder det för dig?
Högvolym-appar som web scrapers, data pipelines eller nedladdare med tusentals connections vinner stort. Lägre minnesanvändning, effektivare CPU, stabilare resurser.
Embedded och IoT sparar varje cykel och byte tack vare färre trådar och descriptors.
Lågskalig användning får tystare vinster. Snabbare DNS, färre anrop. Din infra tackar.
Den stora bilden
Curl:s DNS 2026-satsning visar mogen utveckling. Problemet identifierat, lösning ren, bakåtkompatibelt med nya alternativ. Inget brutet, allt förbättrat.
Så ser öppen källkod ut när prestanda prioriteras.
Har du testat curl 8.20.0? Uppdaterat din infra? Kommentera era erfarenheter – curl-teamet lyssnar på verklig feedback för nästa steg.