Curl 8.20.0: DNS hal qilishdagi thread muammosi qanday yechildi – Resource pooling haqida batafsil

Curl 8.20.0: DNS hal qilishdagi thread muammosi qanday yechildi – Resource pooling haqida batafsil

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

DNS da threading muammosi: Hech kim gapirmaydi

Agar curl bir vaqtning o'zida o'nlab DNS so'rovlarini qanday boshqarishini bilmoqchi bo'lsangiz, hayratda qolasiz.

Ilgari curl har bir parallel ulanish uchun alohida thread ochib, socketpair (Linuxda eventfd) orqali natijalarni sinxronlashtirardi. Bu samarasiz edi.

Bir necha ulanish bo'lsa, muammo sezilmasdi. Lekin minglab ulanishli korxona dasturlari? Har thread xotira, CPU va OS resurslarini yeydi. Socketpairlar file descriptorlarni ko'paytiradi. Natija – resurslar chidab bo'lmaydigan darajada oshadi.

Yomonroq: DNS sekinlashsa, butun tozalash jarayoni tiqilib qoladi. Easy handle ni o'chirishga urinsangiz, dastur deadlockga tushadi.

Eski yechim (va uning zaifligi)

Curl jamoasi CURLOPT_QUICK_EXIT ni taklif qilgan. Bu threadlarni join qilmasdan detach qiladi – dastur tugasa yaxshi. Lekin dastur ishlayveradigan bo'lsa? Threadlar xotirada to'planib, resurslarni yeydi.

Bu chiroyli emas edi.

Yangi thread pooling: curl 8.20.0 o'zgarishi

Eng yangi curl eski usulni tashlab, multi handle darajasida thread pooling kiritdi.

Yangi tuzilma shunday:

Bir thread pool, ko'p ulanish

Har easy handle uchun thread emas, multi handle uchun bitta pool:

  • Threadlarni kerak bo'lganda ochadi (oldindan ajratmaydi)
  • Bo'sh threadlarni avtomatik o'chiradi
  • DNS so'rovlarini navbatga qo'yadi
  • Natijalarni umumiy bildirish orqali qaytaradi
  • Tayyor DNSlarni easy handlelarga yuboradi

Muhimi: faqat bitta socketpair multi handle uchun, qancha ulanish bo'lmasin. Yuzlab minglab transferlarda file descriptorlar keskin kamayadi.

Sizni boshqaruv beradi

CURLMOPT_RESOLVE_THREADS_MAX opsiyasi bilan maksimal thread sonini cheklaysiz. Standart 20 ta, keyinroq fikr-mulohazalarga qarab o'zgartiriladi.

Endi resurslarni nazoratsiz sarflamaysiz. CPU ni tejash uchun 5 taga qo'ysangiz bo'ladi. Yuqori tezlik uchun 50 ta – ixtiyor sizda.

Yangi CURLMOPT_QUICK_EXIT multi darajasida poolni tez yopadi. Easy handlelarni xavfsiz o'chirish mumkin – stalled threadlar yo'q. Kechikkan DNSlar oddiygina tashlanadi.

Tezlik yutug'i (ko'pincha)

Resurs tejashdan tashqari, pool allaqachon ishlayotgan threadlarda DNS qiladi. Thread ochish, xotira ajratish va sys_calllar kamayadi.

Katta tezlik ko'rasizmi? Dasturingizga bog'liq. Lekin har doim yaxshiroq – kamroq switching, barqaror latency.

Haqiqat: Yangi kod, yangi xatolar

Bu katta o'zgarish. Kod ko'paydi, murakkablik oshdi, edge caselar paydo bo'ldi.

Jamoa ishonchli, lekin refactor har doim bug keltiradi. O'z muhitingizda sinab ko'ring.

Sizga nima beradi

Yuqori yukdagi dasturlar (web scraperlar, data pipeline, downloadlar) uchun curl 8.20.0+ katta yaxshilanish. Xotira, CPU tejamkor, resurslar bashoratli.

Embedded yoki IoT da har bayt muhim bo'lsa, thread va FD tejashi seziladi.

Oddiy foydalanish da yaxshilanish ko'rinmas, lekin DNS tezroq, sys_calllar kam. Infrangiz quvonadi.

Kengroq ko'rinish

Curlning DNS 2026 loyihasi (bu pooling uning bir qismi) yetuk muhandislik namunasidir: muammoni topib, toza yechim qurib, eski kodlarni buzmay, yangi opsiyalar qo'shdi.

Open-source da performansi jiddiy oladilar.


Curl 8.20.0 ni sinab ko'rdingizmi? Infrangizni yangilaysizmi? Izoh qoldiring – curl jamoasi haqiqiy tajribalarni hisobga oladi.

Read in other languages:

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