Ne Zaman ThreadPool
Kullanmamalıyım?
.Net
içindeki ThreadPool
, çoklu iş parçacığı yönetimi için sıklıkla başvurulan bir çözüm olarak görülmektedir. İş parçacığı havuzunu yönetme yeteneği, görevlerin eş zamanlı olarak yürütülmesini sağlar ve talep üzerine iş parçacıkları oluşturma ve yok etme maliyetinden kaçınır. Ancak, ThreadPool
kullanımının en iyi yaklaşım olmayabileceği belirli senaryolar vardır. Bu gönderide, ThreadPool
‘dan kaçınılması gereken durumları ve mevcut alternatifleri inceleyeceğiz.
ThreadPool
‘dan Kaçınma Nedenleri
-
Çalışan Yöntemlerle Etkileşim İhtiyacı
- Uygulamanız, bir iş parçacığının yürütmesiyle etkileşimde bulunmanızı veya onu manipüle etmenizi gerektiriyorsa—örneğin, iş parçacığını sonlandırmak—
ThreadPool
kullanmaktan kaçınmalısınız.ThreadPool
içindeki iş parçacıkları sistem tarafından yönetilmektedir ve uygun bir sonlandırmaya izin vermeyebilir.
- Uygulamanız, bir iş parçacığının yürütmesiyle etkileşimde bulunmanızı veya onu manipüle etmenizi gerektiriyorsa—örneğin, iş parçacığını sonlandırmak—
-
Tek İş Parçacıklı Apartman (STA) İş Parçacığı Gereksinimi
- Özellikle belirli UI çerçeveleri veya COM etkileşimi ile başa çıkarken, kodun Tek İş Parçacıklı Apartman (STA) iş parçacığında yürütülmesi gereken durumlar vardır.
ThreadPool
iş parçacıkları çoklu iş parçacıklıdır, bu nedenle bu gereksinimi desteklemezler ve çalışma zamanı hatalarına yol açabilir.
- Özellikle belirli UI çerçeveleri veya COM etkileşimi ile başa çıkarken, kodun Tek İş Parçacıklı Apartman (STA) iş parçacığında yürütülmesi gereken durumlar vardır.
-
Uygulama Kapatıldığında İş Parçacıklarını Canlı Tutma
ThreadPool
iş parçacıkları varsayılan olarak arka plan iş parçacıklarıdır. Bu, uygulama kapandığında otomatik olarak sonlanacakları anlamına gelir, hala kod yürütüyor olsalar bile. Ana uygulama tamamlandığında durumunu koruması gereken bir iş parçacığına ihtiyacınız varsa,ThreadPool
doğru seçenek değildir.
-
İş Parçacığı Önceliklerinin Değiştirilmesi
ThreadPool
, iş parçacıklarının önceliklerinin değiştirilmesine izin vermez. Varsayılan olarak, iş parçacığı önceliği Normal olarak ayarlanmıştır ve uygulamanızın iş parçacıklarının farklı bir öncelikle çalışmasını gerektirmesi durumunda, alternatif iş parçacığı seçeneklerini değerlendirmeniz gerekir.
Alternatif Seçenekler
ThreadPool
birçok senaryo için verimli olsa da, alternatifleri düşünmenizin önemli olduğu durumları bilmek şarttır. İşte dikkate değer iki alternatif:
-
Açık İş Parçacıkları
Thread
sınıfını kullanarak açık iş parçacıkları oluşturmak, iş parçacığı yönetimi, sonlandırma, öncelik ve belirli apartman türlerinde yürütme gibi konularda tam kontrol sağlar.
-
Paralel Uzantılar Çerçevesi
- Paralel Uzantılar Çerçevesi, uygulamalarınızdaki paralelliği yönetmek için daha sofistike bir yaklaşım sunar. Görevleri basitleştirir ve manuel iş parçacığı yönetimi ihtiyacını ortadan kaldırabilecek yapı taşları sağlar.
Sonuç
Özetle, ThreadPool
, çoklu iş parçacığı görevlerini yönetmek için .Net’in güçlü bir özelliği olsa da, ne zaman ihtiyaçlarınızı uygun şekilde karşılamayabileceğini tanımak önemlidir. İş parçacığı yürütmesi üzerinde doğrudan kontrol, STA uyumluluğu, uzun ömürlü iş parçacıkları veya özel öncelik ayarları gerektiren durumlarla karşılaşırsanız, açık iş parçacıklarını kullanmayı veya Paralel Uzantılar Çerçevesi’ni keşfetmeyi dikkate alın.
Daha fazla bilgi için, MSDN makalesi “Yönetilen İş Parçacığı Havuzu” kullanılmaması gereken ThreadPool
durumları hakkında ayrıntılı bir liste içermektedir—.Net iş parçacıklarıyla derinlemesine ilgilenen herkesin göz atması gereken bir kaynak.