İplik havuzu nedir? Neden ip havuzu kullanılıyor? İplik havuzları nasıl kullanılır?
1. İplik havuzu nedir?
.NET Framework'un ThreadPool sınıfı, görevleri çalıştırmak, iş öğeleri göndermek, asenkron I/O'yu işlemek, diğer iş parçacıkları adına beklemek ve zamanlayıcıları işlemek için kullanılabilen bir iş noktası havuzu sağlar. Peki thread pool nedir? İş parçacığı havuzu aslında iş parçacığı nesnelerini depolayan bir "havuz"dur ve havuzdaki minimum/maksimum iş parçacığı sayısını belirlemek, çalıştırılacak yöntemleri sıraya almak gibi temel yöntemler sağlar. ThreadPool statik bir sınıftır, bu yüzden nesne oluşturmadan doğrudan kullanılabilir.
2. Neden ip havuzu kullanılır? Faydaları nelerdir?
Microsoft'un resmi web sitesi şöyle diyor: Birçok uygulama, olayların gerçekleşmesini bekleyen uykuda olan çok sayıda iş parçacığı oluşturuyor. Ayrıca, değişen veya güncellenmiş eyalet bilgisi için ara ara uyanmak için uykuya dalabilecek birçok başlık da var. İş parçacığı havuzları, sistem tarafından yönetilen işçi iş parçacıkları havuzu aracılığıyla iş parçacıklarını daha verimli kullanmanızı sağlar.
Basitçe söylemek gerekirse, her yeni iş parçacığı bellek alanı ve diğer kaynakları doldurmalı ve bu kadar çok yeni iş başlığı varken, çoğu ya uykuda ya da kaynakların serbest bırakılmasını bekliyor. Birçok iş parçacığı, veri yenilemek gibi periyodik olarak küçük işleri yapar ve çizmek için çok israfçıdır ve gerçek programlamada çok sayıda iş parçacığının ortaya çıkıp kısa sürede bitmesi nadirdir. Bu nedenle, thread havuzları kavramı önerildi. Uygulama iş parçacığı havuzuna başka bir talep yaparsa, beklemedeki iş parçacığı aktive olur ve yeni bir iş parçacığı oluşturmadan görevi çalıştırır, bu da çok fazla yük tasarrufu sağlar. Sistem, iş parçacıkları yalnızca iş parçacığı sayısı maksimum iplik sayısına ulaştığında otomatik olarak yok eder. Bu nedenle, iş örgüsü havuzlarını kullanmak büyük üretim ve imha masraflarını önleyebilir, daha iyi performans ve istikrar sağlar ve ikinci olarak, geliştiriciler iş parçacıklarını sistem yönetimine devrederek diğer görevlere odaklanabilir.
3. İplik havuzlarını nasıl kullanırım?
Aslında, iplik havuzları kullanımı çok basittir, aşağıdaki gibi
a. Maksimum ve minimum iş ipliği havuzunu belirleyin:
ThreadPool.SetMaxThreads (int workerThreads,int completionPortThreads) Aynı anda aktif olabilecek bir iş başlığı havuzu için istek sayısını ayarlayın. Bu sayıdan büyük tüm istekler, iş parçacığı iş parçacığı kullanılabilir olana kadar kuyrakta kalacaktır. Ayrıca en az iş parçacığı sayısını da ayarlayabilirsiniz.
b. İş noktası havuzuna görevler ekleyin:
ThreadPool.QueueUserWorkItem(yeni WaitCallback(metod adı));
veya ThreadPool.QueueUserWorkItem(yeni WaitCallback(metod adı), parametre);
Örneğin, iş havuzunda en fazla 5 iş parçacığı bir yöntemi 60 kez çalıştırırsa, 5 yıllık toplam maaş şu şekildedir:
Thread pooling kullanmıyorsanız, Run() yöntemini asenkron olarak çalıştırmak için 60 iş parçacığı açmanız gerekebilir ki bu da alan kaynaklarının boşa gitmesine yol açar. Şimdi 5 iş parçacığına kadar kullanıyoruz, bunlar 1 saniyede çalıştırılabiliyor ve verimlilik ile performans çok iyi.
|