2016-04-04 22 views
0

Yüksek ölçeklenebilir bir uygulama tasarlıyorum. Ortak bir sıradan görev alan ve bunları işleyen birçok işlem düğümüne sahip olacak.ThreadPool biriktirme listesindeki sıraya alınmış öğelerin sayısı nasıl tanınır

Benim fikrim, her düğümde görev sırasından okunan bir iş parçacığım oluşturmak ve işi yapmak için bir Görev başlatmaktır.

Sorunum, her düğümde sıraya alınmış Görev sayısını sınırlamaktır, çünkü bu yalnızca Görev'leri oluşturan iş parçacığının hızına bağlıdır ve düğümün geçerli yüküne bağlı değildir. ThreadPool'da sıraya alınan öğelerin sayısını nasıl bilebilirim? Adil bir görev dağılımını nasıl yapabilirim?

Zaman ayırdığınız için teşekkür ederiz.

+1

[bu] 'ya bir göz atın (http://stackoverflow.com/questions/4410959/how-can-i-determine-the-number-of-items-in-threadpool-queue) – Zero

+0

Ne demek istiyorsun? "işlem düğümleri" tarafından? Tek bir paylaşılan bellek sistemindeki sadece işlemcilerse, tüm bu sorunları sizin için ele alan Görev Paralel Kitaplığı'nın varsayılan zamanlayıcılarına güvenmeniz gerekir. – Douglas

+0

Sadece Semaphore/Slim kullanın. Görevi başlatmadan önce Bekle() öğesini çağırın, görev tamamlandığında Release(). Yapmanıza izin verilen tamamlanmamış görevler belirtildi. –

cevap

0

Baştaki ortak sıradaki görevin her yaratılması Interlocked olmalıdır. QueuedTaskCount değişkenini başlatırsanız, başlangıçtaki her görev Interlocked olmalıdır. Aynı değişkeni değiştiriniz. QueuedTaskCount değişkeni, sıraya alınmış görevlerin sayısını içerir.

İlgili konular