Curl 8.20.0 korjaa DNS-vian threadingissä: Syväsukellus resource poolingiin
DNS-säikeistysongelma, josta kukaan ei puhu
Oletko koskaan miettinyt, mitä tapahtuu, kun curl käsittelee kymmeniä samanaikaisia DNS-kyselyitä? Vanha systeemi loi jokaiselle yhteydelle oman säikeen ja socketpairin tulosten synkronointiin. Pienellä määrällä yhteyksiä tämä meni läpi huomaamatta. Tuhansien rinnakkaisten yhteyksien kanssa homma räjähti käsiin: muistia, prosessoria ja tiedosto記述符eja kului turhaan.
Pahinta oli, että jumittunut DNS-kysely saattoi lukita koko prosessin. Helpon poistaminen säikeen ollessa kiinni johti deadlockiin.
Vanha kiertotie ja sen heikkoudet
curl-tiimi lisäsi CURLOPT_QUICK_EXIT-option, joka irrotti säikeet sen sijaan että odotti niiden valmistumista. Toimii, jos ohjelma lopetetaan heti. Pitkäkestoisissa sovelluksissa säikeet kertyivät taustalle ja söivät resursseja kunnes prosessi kaatui.
Kludgen perusmuoto.
Uusi thread pooling mullistaa pelin: curl 8.20.0
curl 8.20.0 tuo thread poolingin multi handle -tasolle. Yksi säikeiden pulssi korvaa vanhan kaaoksen.
Yksi pulssi, monta yhteyttä
- Säikeet käynnistyvät tarpeen mukaan, ei turhaa varaus.
- Tyhjät säikeet lopetetaan automaattisesti.
- Kyselyt jonotetaan.
- Tulokset jaetaan yhteisen ilmoitusmekanismin kautta oikealle easy handlle.
Vain yksi socketpair per multi handle – vaikka yhteyksiä olisi tuhansia. Tiedosto記述符-kulutus romahtaa.
Säätömahdollisuudet käteen
CURLMOPT_RESOLVE_THREADS_MAX rajoittaa säikeiden maksimimäärän. Oletus 20, säädettävissä kokemusten perusteella. Haluatko vain 5 säiettä prosessorin säästämiseksi? Tee se. Tarvitsetko 50 maksiminopeuteen? Mahdollista.
Uusi CURLMOPT_QUICK_EXIT multi-tasolla ohjaa pulssin sulkemista. Helpot voi poistaa vapaasti ilman jumitusvaaraa. Myöhästyneet DNS-tulokset hylätään siististi.
Tehokkuusparannus arjessa
Paitsi resurssisäästöt, myös suorituskyky nousee: kyselyt pyörivät valmiissa säikeissä. Ei käynnistyskuluja, vähemmän allokointeja ja systeemicallseja. Nopeus riippuu sovelluksesta, mutta kokonaisuus on parempi – vähemmän vaihtoja, tasaisempaa latenssia.
Uusi koodi, uudet bugit
Merkittävä muutos tarkoittaa enemmän koodia ja piilopaikkoja virheille. curl-tiimi uskoo stabiiliuteen, mutta testaa aina omassa ympäristössäsi.
Mitä tämä merkitsee sinulle
Korkean läpimonin sovelluksissa (web-kaavijat, datalinjat, lataussarjastimet) muistijalan pieneneminen ja tehokkuus nousevat selvästi.
Sulautetuissa ja IoT-jutuissa jokainen säästö lasketaan – tämä auttaa.
Pienimuotoisessa käytössä parannukset ovat hiljaisia, mutta DNS:t menevät nopeammin ja kevyemmin.
Laajempi näkymä
curlin DNS 2026 -hanke näyttää kypsää insinööritaitoa: ongelma tunnistettu, ratkaisu puhdas, taaksepäin yhteensopiva plus uudet optionit. Avoimen lähdekoodin huippua, kun suorituskykyyn panostetaan tosissaan.
Oletko testannut curl 8.20.0:aa? Siirtymässä tuotantoon? Jaa kokemuksesi kommenteissa – curl-tiimi kuuntelee aitoa palautetta.