curl 8.20.0: Így javította ki a DNS-feloldás szálproblémáit – Mélyreható elemzés a resource poolingról
A DNS-szálprobléma, amiről senki sem beszél
Kíváncsi vagy, mi történik a háttérben, ha a curl tucatnyi párhuzamos DNS-lekérdezést indít? Felkészülj a meglepetésre – vagy aggodalomra.
Régebben a curl így működött: minden párhuzamos kapcsolathoz külön szálat indított, plusz socketpair-t (Linuxon eventfd-t) a koordinációhoz. Hatékonynak tűnik? Pedig borzalmasan pazarló volt.
Kis számú átvitelnél ez nem zavart. De enterprise appok ezrekkel? Ott kezdődik a káosz. Minden szál memóriát, CPU-t és rendszererőforrást zabál. A socketpairek fájlleírókat emésztenek fel. Ezres nagyságrendben? Lineáris resource-robbanás.
Ráadásul ha egy DNS-lekérdezés elakad, az blokkolhatja a teljes takarítást. Easy handle törlése közben beragadt szál? Helló, deadlock.
A régi folt (és miért szívott)
A curl csapatnak volt egy Quick Exit opciója: CURLOPT_QUICK_EXIT. Ezzel detach-elték a szálakat join helyett – jó, ha az app éppen kilép. De ha tovább futott? A szálak felgyűltek memóriában, mint szellemfregatt. Kludge a köbön.
Szálpool: a curl 8.20.0 új korszaka
Az új verzió kidobja a régit, és multi handle-szintű szálpoolt hoz be.
Íme a lényeg:
Egy pool, sok kapcsolat
Nem easy handle-enként egy szál, hanem multi handle-enként egy okos pool. Ez:
- Igény szerint indít szálakat (nincs felesleges előreallokálás)
- Inaktív szálakat kidobja idő után
- Sorba állítja a DNS-kéréseket
- Közös notifikációval adja vissza az eredményeket
- Visszaosztja őket a megfelelő easy handle-eknek
A kulcs: egy socketpair multi handle-enként, akár ezreket kezelsz is. Drasztikusan kevesebb fájlleíró nagy appokban.
Te irányítasz
Új opció: CURLMOPT_RESOLVE_THREADS_MAX. Limiteld a resolver szálak számát. Alapértelmezett 20, de finomhangolható visszajelzések alapján.
Nincs több vak resource-fogyasztás. 5 szál CPU-spóroláshoz? Megvan. 50 a max throughput-hoz? Oké.
Multi-szintű CURLMOPT_QUICK_EXIT is van: gyors kilépés pool-szinten. Easy handle törlésnél nincs gond beragadt join-okkal. Későn érkező DNS? Kidobva. Tiszta, megbízható.
Teljesítményugrás (általában)
Resource-megtakarításon túl gyorsabb: DNS-ek már futó szálakon mennek. Nincs startup overhead, kevesebb allokáció, kevesebb syscall.
Óriási gyorsulás? Attól függ, mi a setupod. De mindig jobb: kevesebb művelet, kevesebb kontextusváltás, kiszámíthatóbb késleltetés.
Valóságcheck: új kód, új bogarak
Ez nagy refactor. Több kód, több rés, több edge case. A fejlesztők confek, de hibák jönnek. Teszteld alaposan a saját környezetedben.
Mit jelent neked?
Magas throughput appokhoz (web scraper, adatpipeline, letöltő farmok) ez upgrade: kisebb memória, jobb CPU, kiszámíthatóbb resource-ok.
Embedded/IoT rendszerekben minden byte és ciklus számít – a kevesebb szál és fájlleíró életmentő.
Kis skálán láthatatlan javulás: gyorsabb DNS, kevesebb syscall. Infra örül.
Nagyobb kép
A curl DNS 2026 kezdeményezés (ebből a pool a sztár) mutatja a profi open source-t: problémafelismerés, tiszta megoldás, backward compat + új opciók. Semmi sem tört, minden jobb lett.
Ez az, amikor a maintainer-ek komolyan veszik a perfot és resource-okat.
Kipróbáltad már a curl 8.20.0-t? Migrálod az infrastruktúrát? Írd meg kommentben a tapasztalatot – a curl csapat imádja a valós visszajelzéseket ezekhez a döntésekhez.