Jak curl 8.20.0 vyřešil zasekávání DNS: Tajemství resource pooling pod lupou

Jak curl 8.20.0 vyřešil zasekávání DNS: Tajemství resource pooling pod lupou

Kvě 01, 2026 curl dns resolution threading performance optimization system architecture open source development

Problém s vlákny v DNS, o kterém se nemluví

Představte si, že curl zpracovává desítky souběžných DNS dotazů. Co se děje v pozadí? Nedávno se to změnilo dramaticky.

Dříve fungovalo threaded resolver v curlu jednoduše: pro každé paralelní připojení vzniklo nové vlákno. K tomu socketpair (nebo eventfd na Linuxu) pro koordinaci výsledků. Při malém počtu přenosů to nebolí. Ale tisíce souběžných spojení v podnikových appkách? Katastrofa.

Každé vlákno žere paměť, CPU a systémové zdroje. Socketpair navyšuje zátěž na file descriptory. Při tisících easy handles to exploduje lineárně. Horší je, když se DNS zasekne – čištění handleů se zablokuje. Aplikace může zamrznout.

Starý workaround a jeho limity

Tým curlu měl řešení: CURLOPT_QUICK_EXIT. Vlákna se odpojila místo čekání. Super pro appky, které končí. Ale pokud běžela dál? Vlákna se hromadila v paměti jako zombie. Žrala zdroje do konce procesu.

Byl to jen záplata.

Thread pooling: velká změna v curl 8.20.0

Nová verze curl 8.20.0 to předělala od základů. Přichází thread pooling na úrovni multi handle.

Jak to funguje:

Jeden pool vláken pro všechny připojení

  • Vlákna startují podle potřeby, žádné zbytečné rezervace.
  • Nečinná vlákna se automaticky ukončí.
  • DNS požadavky se řadí do fronty.
  • Výsledky jdou přes sdílené notifikace.
  • Dokončené resolutions se vrátí správnému easy handle.

Klíčové: jen jeden socketpair na multi handle. I při stovkách nebo tisících přenosů. File descriptory klesnou dramaticky.

Vy máte kontrolu

Nová volba CURLMOPT_RESOLVE_THREADS_MAX omezí maximální počet vláken. Výchozí je 20, doladí se podle feedbacku.

Nechcete nekontrolovaný rast zdrojů? Nastavte na 5 pro úsporu CPU. Potřebujete 50 pro rychlost? Žádný problém.

Přidal se i CURLMOPT_QUICK_EXIT na multi úrovni. Pro rychlé ukončení procesu. Easy handles už nemají vlastní vlákna – odstraňte je bez rizika. Pozdní DNS výsledky? Vyhodí se pryč. Jednoduché a předvídatelné.

Výkonový posun (většinou)

Kromě úspor přináší pooling boost: DNS běží ve stávajících vláknech. Žádný overhead na start, méně alokací, méně systémových volání.

Uvidíte obrovský rozdíl? Záleží na vaší app a systému. Ale celkově je to lepší – méně přepínání, stabilnější latence.

Realita: nový kód, nové chyby

Je to velká přestavba. Více kódu, složitější mechanizmy, skrýš pro edge cases.

Vývojáři curlu věří, že nic nezkazili. Ale testujte v reálu – bugy vyplavou.

Co to znamená pro vás

Vysoký throughput s tisíci spojení (scrapery, datové pipeliny, distribuované downloadery)? Curl 8.20.0+ sníží paměť, zlepší CPU a stabilizuje zdroje.

Embedded nebo IoT systémy? Každý ušetřený byte a cyklus se počítá díky menšímu overheadu.

Běžné použití? Zlepšení je tiché – rychlejší DNS, méně volání. Infra to ocení.

Širší pohled

Toto je součást DNS 2026 iniciativy curlu. Ukazuje zralou práci: problém identifikovat, elegantní řešení navrhnout, kompatibilitu zachovat a dát nové možnosti. Nic se nezlomilo, vše se zlepšilo.

Takto open source bere performance vážně.


Už jste testovali curl 8.20.0? Přecházíte na novou verzi? Pište komentáře s vašimi zkušenostmi – tým curlu je bere vážně do dalších rozhodnutí.

Read in other languages:

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