curl 8.20.0'da DNS Çözümleme Sorunları Nasıl Kapandı: İş Parçacıkları ve Kaynak Havuzlaması Hikayesi

curl 8.20.0'da DNS Çözümleme Sorunları Nasıl Kapandı: İş Parçacıkları ve Kaynak Havuzlaması Hikayesi

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

curl'ün DNS Sorunları Nasıl Çözüldü: Thread Pooling Devrim

Curl'ün binlerce DNS sorgusunu aynı anda nasıl yönettiğini hiç merak ettiniz mi? Spoiler: eskiden bu işi çok da verimli yapmıyordu.

Eski Sistem: Her Bağlantının Kendi Thread'i Vardı

Curl'ün eski tasarımı çok basit ama verimsizdi. Her paralel bağlantı için tamamen yeni bir thread açılıyordu. Sonra da haberleşme için socketpair (Linux'ta eventfd) kullanılıyordu. Kulağa verimsiz geliyorsa? Çünkü gerçekten öyleydi.

Birkaç transfer yapıyorken sorun fark edilmiyordu. Ama binlerce eş zamanlı bağlantıyı idare eden kurumsal uygulamalarda iş çetrefilli hale geliyordu. Her thread kendi belleğini tutuyor, işlemci kaynağı tüketiyor, işletim sistemine yük bindiriyor. Binlerce easy handle'ın her biri bir socketpair açıyordu. Dosya tanımlayıcı sayısı astronomik rakamlara çıkıyordu.

Bir de DNS çözümlemesi takılırsa çıkmazda kalıyordunuz. Çıkış yapılan thread asıl yerde duruyorsa? Uygulamanız kilitleniyordu.

Geçici Çözüm: Hacky Bir Bant-Aid

Curl ekibi CURLOPT_QUICK_EXIT adlı bir trick bulmuştu. Bunu ayarladığınız zaman thread'ler düzgün bir şekilde kapatılmak yerine detach ediliyordu. Uygulamanız kapanırken işe yarıyordu ama açık kalmak gereken uygulamalarda sorun ortaya çıkıyor. Detach edilen thread'ler sessizce bellekte birikerek kaymağa dönüşüyordu.

Tipik bir geçici çözüm işte. Kalıcı değil, işe yaramıyor, yanında başka sorunlar doğuruyor.

Curl 8.20.0 ile Gelen Yeni Yaklaşım: Thread Pooling

Yeni sürüm eski sistemi tamamen çöpe attı. Bunun yerine her multi handle için merkezi bir thread pool kurdu.

Sistem şöyle çalışıyor:

Tek Pool, Çoklu Bağlantılar

Bir easy handle başına bir thread yerine, bir multi handle başına bir pool var. Bu pool:

  • Gereken zaman thread başlatır (boş yere ön ayırım yok)
  • Hareketsiz thread'leri otomatik sonlandırır
  • Gelen DNS sorgularını kuyruğa alır
  • Sonuçları tüm bağlantılara iletir
  • Hazır olan cevapları doğru easy handle'a geri gönderir

En önemlisi? Artık multi handle başına tek bir socketpair var. Kaç tane paralel bağlantı açtığınız fark etmiyor. Yüzlerce, binlerce transfer yapıyor olsanız da dosya tanımlayıcı sayısı neredeyse hiç değişmiyor.

Kontrol Sizde

CURLMOPT_RESOLVE_THREADS_MAX seçeneği ile maksimum resolver thread sayısını sınırlayabilirsiniz. Varsayılan 20. Curl ekibi bunun gerçek dünyada nasıl performans göstereceğini görmek istiyor.

Artık kaynakların kontrolsüz harcamından korkmanıza gerek yok. CPU'yu uygulamanız için korumak istiyorsanız, thread sayısını 5'e indirin. Maksimum hız istiyorsanız 50 ayarlayın. Seçim sizin.

Yeni sürüm thread pool'un kapanış şeklini kontrol eden çok seçenekli CURLMOPT_QUICK_EXIT'i de getirdi. Proses sona ererken thread temizliğine takılmamak istiyorsanız kullanılıyor. Ama artık easy handle'lar bireysel thread'e sahip olmadığı için, handle'ları güvenli bir şekilde silebilirsiniz.

Bir handle silinmesinden sonra gelen DNS yanıtı? Basitçe atılıyor. Temiz, öngörülebilir, sürpriz yok.

Performans Kazancı (Çoğu Zaman)

Kaynak tasarrufu dışında thread pool'u yeni mimarisi başka bir avantaj da getiriyor: DNS çözümlemeleri artık zaten çalışan thread'lerde gerçekleşiyor. Thread başlatma maliyeti yok. Gereksiz bellek ayırma yok. Tekrarlanan sistem çağrıları yok.

Çok büyük bir hız artışı görecek misiniz? Uygulamanıza bağlı. Ama evrensel olarak daha iyi olduğu kesin—daha az işlem, daha az konteks değişimi, daha tutarlı gecikme.

Kuş Bakışı Gerçeklik Kontrolü: Büyük Değişiklik, Yeni Sorunlar

Açık söylemek gerekirse bu geniş bir mimarisiz değişikliği. Daha çok kod, daha çok hareket eden parça, daha çok hata saklayabilecek yer var.

Curl geliştirici ekibi katalogik bir felaket yaratmadıklarından emin ama her büyük refactor gibi sorunlar çıkacak. O yüzden yeni sürümleri kendi ortamınızda iyice test etmek önemli.

Sizi Etkileyen Şey

Binlerce paralel bağlantı yapan yüksek verimli uygulamalar (web scraper, veri işleme, dağıtık indirme) yazıyorsanız curl 8.20.0+ ciddi bir yükseltme. Bellekte daha az yer tutar, CPU'yu daha verimli kullanır, kaynak davranışı daha öngörülebilir.

Gömülü sistem ya da IoT cihazı için yazılım geliştiriyorsanız? Her bit bellek ve her CPU döngüsü değerli. Azalan thread ve dosya tanımlayıcı sayısı gerçek bir fark yaratabilir.

Modest ölçekte curl kullanıyorsanız? İyileştirmeler hala orada ama görünmüyor. DNS sorgularınız biraz daha hızlı tamamlanıyor, sistem çağrıları azalıyor. Bunu hiç fark etmeyeceğiniz bir kazanç ama altyapınız takdir ediyor.

Daha Büyük Resim

Curl'ün DNS 2026 girişiminin (thread pooling bunun ana parçası) ilginç yanı işte burası: profesyonel mühendislik. Sorunu belirle, temiz çözüm tasarla, geriye dönük uyumluluğu koru. Curl ekibi hiçbir şeyi bozmadı, her şeyi iyileştirdi.

Açık kaynak bakımcıları performans ve kaynak kullanımını ciddiye aldığında budur ortaya çıkan.


Curl 8.20.0'ı test ettiniz mi? Altyapınızı yeni sürüme geçirdiyseniz deneyimlerinizi yazın. Curl ekibi gerçek dünya geri bildirimini bu mimari kararlarına aktiF olarak dahil ediyor.

Read in other languages:

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