Thread Pools, en kısa özeti olarak projedeki Asynchronous çalışan yapıların verimli bir koleksiyondur.
Thread Pools öncelikle uygulama içinde çalışan thread daha aza indirgemek ve çalışan iş parçacıkları yönetmek için kullanılır. Yönetim kısmına gelince de bir kuyruk yapısıyla olur, çalışan işler sıralandırılabilir , belli vakitlerde çalışması için zamanlayıcı eklenebilir. Sunucu tarafında, örnek olarak kullanıcıdan gelir bu istekler doğrultusunda yeni iş parçaları oluşur yeni iş parçacıklarının tek amacı bu isteğin yanıtını sağlamaktır. Burada bir dezavantaj giriyor devreye, her iş parçacığını oluşturmak için sunucumuz çalışır istek geldikten sonrasında iş parçacığını oluşturur isteğe yanıt verdikten sonra bu iş parçacığını yok etmek için uğraşırken çok fazla vakit ve kaynak tüketimi yaşatır. Yüksek kaynak tüketimi basit bir proje için çok önemli olmasa bile asıl kaynak tüketimine önem verildiği büyük şirketler için maliyet açısından oldukça zararlıdır. Bu sorun teşkil edebileceği için bu soruna bir Cache yapısıyla çözüm bulunuyor. Sunucuya gelen istekler bir kere iş parçacığı oluşturduktan sonra gelen diğer istekler aynı iş içinse daha önceden oluşturulmuş iş parçacığı burada kullanılır ve atılan isteğin dönütünü sağlar.

Bu görselde ufak örnek olarak bir kuyruk yapısını görebiliyoruz. Havuz boyutunu ve çekirdekleri ayarlayabildiğimiz bir sınıf içerisinden sırasıyla görevler çalıştırılabilir.
Theread Pool Architecture (İş parçacığı Mimarisi)
İş parçacığı havuzunun mimarisi:
- Bir kuyruk yapısı
- İş parçacıklarını yönetebilen bir sistem
- Döngüleri sağlayan iş parçacıkları
- Bütün işlemler için standart bir havuz
Bu maddeler iş parçacığı havuzundan yararlanabilir:
- Çok sayıda iş parçacığını Asynchronous olarak çalıştırabilen bir uygulamadır.
- Uygulama üzerinde istekler doğrultusunda veya başka bir yoldan çok sayıda iş parçacığı oluşturulur. İş parçacıklarını oluşuturulması , yok edilmesi ve yönetilmesi konusunda sunucuya binen yükü azaltır.
- Birbirinden bağımsız çalışan arka planda çalışan uygulamaları işlemek, örnek olarak Google Chrome üzerinde birden çok sekme açtınız asıl size lazım olan sekmeye bakarken arka planda diğer sizin işinizden bağımsız olan sekmelerde yüklenebilmesi.
- Sistem üzerinde gerçekleşen olayları size özel custom şekilde diziler oluşturulması.
Best Practices (En İyi Uygulamalar)
Yeni iş parçacığı havuzu API’si eskiye göre çok daha kontrollü ve esnek bir yapıdadır. Yeni iş parçacığı eskisine göre kontrolleri otomatikleştirilmiş yapıdan bir ziyade ayarlanması gerekir daha güvenli bir hale getirilebilir.
- Bir iş parçacığının yanıt verme süresini iyileştirmek için iş parçacıkları oluşturulabilir fakat bu iş parçacıklarını dikkatli şekilde oluşturmalıyız her yeni iş parçacı CPU’ya etkisi vardır.
- Thread Pool içerisinden bir DLL dosyası kaldırılırken öncelikle o DLL’le ilgili bütün işlemlerin durdurulması veya kaldırılması gereklidir.
- İş parçacığı havuzunu paylaşan iş parçacıklarından bir tanesi bile bir çok geri aramaları yürütebilir. Bu sepele iş parçacıklarını ExitThread’i çağırarak sonlandırmak doğru olmaz.
Thread Pool içerisinde kendi hata ayıklayıcı uzantısı vardır. ‘!tp’ komutu ile şunlara ulaşabiliriz.
- garson adresi (waiter adress)
- obj adres bayrakları (obj adress flags)
- işçi adresi (worker adress)
- havuz adresi bayrakları (pool adress flags)
- sıra adresi bayrakları (tqueue adress flasgs)
Thread Pool mantığına baktığımızda iki parçaya ayırabiliriz. Bir havuz içerisinde olan bir havuz içerisinde olan iş parçacıklarının tamamlanma aşamalarını takip etmek diğeri ise bir kuyruk yapısı ile yönetmek.
Thread Pool Örneği

Öncelikle bir task oluşturuyoruz

Görevimizi oluşturduktan sonra çıktısını kontrol ediyoruz .



Bir method oluşturuyoruz başlattıktan sonra, bir for döngüsü ile Kuyruğun içinde ThredPoolMethod dolaşıp döngü sağlıyoruz.
Daha sonra bir Thread nesnesi oluşturuyoruz , daha sonra Thread nesnemizin özelliklerini ekrana bastırıyoruz.