curl 8.20.0: Így javította ki a DNS-feloldás szálproblémáit – Mélyreható elemzés a resource poolingról

curl 8.20.0: Így javította ki a DNS-feloldás szálproblémáit – Mélyreható elemzés a resource poolingról

Máj 01, 2026 curl dns resolution threading performance optimization system architecture open source development

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.

Read in other languages:

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