Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
System.Threading.ThreadPool sınıfı, uygulamanıza sistem tarafından yönetilen bir çalışan iş parçacıkları havuzu sağlar ve iş parçacığı yönetimi yerine uygulama görevlerine odaklanmanıza olanak sağlar. Arka plan işleme gerektiren kısa görevleriniz varsa, yönetilen iş parçacığı havuzu birden çok iş parçacığından yararlanmanın kolay bir yoludur. İş parçacığı havuzundaki iş parçacıklarında zaman uyumsuz görevler gerçekleştiren Task ve Task<TResult> nesneleri oluşturabildiğiniz için, Framework 4 ve sonraki sürümlerde iş parçacığı havuzunun kullanımı önemli ölçüde daha kolaydır.
.NET, Görev Paralel Kitaplığı (TPL) işlemleri, zaman uyumsuz G/Ç tamamlama, zamanlayıcı geri çağrıları, kayıtlı bekleme işlemleri, temsilciler kullanarak yapılan zaman uyumsuz yöntem çağrıları ve System.Net soket bağlantıları dahil olmak üzere birçok amaç için iş parçacığı havuzu iş parçacıklarını kullanır.
İş parçacığı havuzu özellikleri
İş parçacığı havuzundaki iş parçacıkları arka plan iş parçacıklarıdır. Her iş parçacığı varsayılan yığın boyutunu kullanır, varsayılan önceliğe göre çalışır ve çok iş parçacıklı dairededir. İş parçacığı havuzundaki bir iş parçacığı görevini tamamladıktan sonra bekleyen iş parçacıklarının bulunduğu kuyruğa geri döner. Bu andan itibaren yeniden kullanılabilir. Bu yeniden kullanım, uygulamaların her görev için yeni iş parçacığı oluşturma maliyetini önlemesini sağlar.
İşlem başına yalnızca bir iş parçacığı havuzu vardır.
İş parçacığı havuzundaki özel durumlar
İş parçacığı havuzundaki işlenmeyen özel durumlar, işlemi sonlandırır. Bu kuralın üç özel durumu vardır:
- System.Threading.ThreadAbortException bir iş parçacığı havuzu iş parçacığında Thread.Abort çağrıldığı için fırlatılır.
- System.AppDomainUnloadedException, uygulama etki alanı kaldırıldığı için bir iş parçacığı havuzundaki iş parçacığında fırlatılır.
- Ortak dil çalışma zamanı veya ana bilgisayar işlemi iş parçacığını sonlandırır.
Daha fazla bilgi için bkz. Yönetilen İş Parçacıklarında Özel Durumlar.
İş parçacığı havuzundaki maksimum iş parçacığı sayısı
İş parçacığı havuzuna kuyruğa alınabilecek işlem sayısı yalnızca kullanılabilir bellekle sınırlıdır. Ancak, iş parçacığı havuzu aynı anda işlemde etkin olabilecek iş parçacığı sayısını sınırlar. Tüm iş parçacığı havuzu iş parçacıkları meşgulse, yürütülecek iş parçacıkları kullanılabilir duruma gelene kadar ek iş öğeleri kuyruğa alınır. bir işlem için iş parçacığı havuzunun varsayılan boyutu, sanal adres alanının boyutu gibi çeşitli faktörlere bağlıdır. Bir işlem, iş parçacığı sayısını belirlemek için ThreadPool.GetMaxThreads yöntemini çağırabilir.
ThreadPool.GetMaxThreads ve ThreadPool.SetMaxThreads yöntemlerini kullanarak en fazla iş parçacığı sayısını denetleyebilirsiniz.
Uyarı
Ortak dil çalışma zamanını barındıran kod, ICorThreadpool::CorSetMaxThreads
yöntemini kullanarak boyutu ayarlayabilir.
İş parçacığı havuzu minimumları
İş parçacığı havuzu, her kategori için belirtilen en düşük değere ulaşana kadar isteğe bağlı olarak yeni çalışan iş parçacıkları veya G/Ç tamamlama iş parçacıkları sağlar. Bu en düşük değerleri almak için yöntemini kullanabilirsiniz ThreadPool.GetMinThreads .
Uyarı
Talep düşük olduğunda, iş parçacığı havuzundaki gerçek iş parçacığı sayısı minimum değerlerin altına düşebilir.
En düşük değere ulaşıldığında, iş parçacığı havuzu ek iş parçacıkları oluşturabilir veya bazı görevler tamamlanana kadar bekleyebilir. İş parçacığı havuzu, aktarım hızını iyileştirmek için çalışan iş parçacıklarını oluşturur ve yok eder. Bu, zaman birimi başına tamamlanan görev sayısı olarak tanımlanır. Çok az iş parçacığı kullanılabilir kaynakları en iyi şekilde kullanmayabilirken, çok fazla iş parçacığı kaynak çekişmelerini artırabilir.
Dikkat
Minimum boşta kalan iş parçacığı sayısını artırmak için ThreadPool.SetMinThreads yöntemini kullanabilirsiniz. Ancak, bu değerleri gereksiz yere artırmak performans sorunlarına neden olabilir. Aynı anda çok fazla görev başlatılırsa, bunların tümü yavaş görünebilir. Çoğu durumda iş parçacığı havuzu, iş parçacıklarını ayırmaya yönelik kendi algoritmasıyla daha iyi performans gösterir.
İş parçacığı havuzunu kullanma
İş parçacığı havuzunu kullanmanın en kolay yolu, Görev Paralel Kitaplığı'nı (TPL) kullanmaktır. Varsayılan olarak, TPL türleri gibi Task ve Task<TResult> görevleri çalıştırmak için iş parçacığı havuzu iş parçacıklarını kullanır.
İş parçacığı havuzunu yönetilen koddan ThreadPool.QueueUserWorkItem (ya da yönetilmeyen koddan ICorThreadpool::CorQueueUserWorkItem
) çağırarak ve görevi gerçekleştiren yöntemi temsil eden bir System.Threading.WaitCallback temsilciyi geçirerek de kullanabilirsiniz.
İş parçacığı havuzunu kullanmanın başka bir yolu, ThreadPool.RegisterWaitForSingleObject yöntemini kullanarak ve bekleme işlemiyle ilgili iş öğelerini kuyruğa alarak, sinyal verildiğinde veya zaman aşımına uğradıklarında System.Threading.WaitHandle delegesi tarafından temsil edilen yöntemi çağıran bir System.Threading.WaitOrTimerCallback iletisi geçirmektir. İş parçacığı havuzundaki iş parçacıkları, geri çağırma fonksiyonlarını çağırmak için kullanılır.
Örnekler için referans verilen API sayfalarını gözden geçirin.
Güvenlik denetimlerini atlama
İş parçacığı havuzu ThreadPool.UnsafeQueueUserWorkItem ve ThreadPool.UnsafeRegisterWaitForSingleObject yöntemlerini de sağlar. Çağrıyı yapanın yığınının, kuyruğa alınan görevin yürütülmesi sırasında gerçekleştirilen güvenlik denetimleriyle ilgisiz olduğundan emin olduğunuzda sadece bu yöntemleri kullanın. ThreadPool.QueueUserWorkItem ve ThreadPool.RegisterWaitForSingleObject her ikisi de çağırıcının yığınını yakalar ve iş parçacığı bir görevi yürütmeye başladığında, bu yığın iş parçacığı havuzunun iş parçacığı yığınıyla birleştirilir. Güvenlik denetimi gerekiyorsa yığının tamamı denetlenmelidir. Denetim güvenlik sağlasa da performans maliyeti de vardır.
İş parçacığı havuzu iş parçacıklarının kullanılmaması gereken durumlar
Kendi iş parçacıklarınızı oluşturmanın ve yönetmenin, iş parçacığı havuzunu kullanmak yerine daha uygun olduğu çeşitli senaryolar vardır.
- Ön plan iş parçacığına ihtiyacınız vardır.
- Bir iş parçacığının belirli bir önceliğe sahip olması gerekir.
- Uzun süreler boyunca iş parçacığının engellenmesine neden olan görevleriniz var. İş parçacığı havuzunun iş parçacığı sayısının bir üst sınırı vardır, bu nedenle çok sayıda engellenen iş parçacığı görevlerin başlamasını engelleyebilir.
- İş parçacıklarını tek iş parçacıklı bir daireye yerleştirmeniz gerekir. Tüm ThreadPool iş parçacıkları çok iş parçacıklı apartmandadır.
- İş parçacığıyla ilişkili kararlı bir kimliğe sahip olmanız veya bir iş parçacığını göreve ayırmanız gerekir.