2013-05-23 18 views
7

Bir pencere işleminde, iş parçacığı için bir defada kullanılacak herhangi bir sınır var. Eğer öyleyse, işlem başına kullanılabilecek maksimum iplik sayısı nedir?Bir işlemin işlem yapabileceği maksimum iş parçacığı sayısı nedir

+0

sen denediniz https://www.google.de/#q=What+is+the+maximum+number+of+threads+a+process+ zaten + içeride + pencere var mı? –

+0

Bunu test ettim. Benim 64-bit Vista nihai 7000'den fazla iş parçacığı oluşturmayı reddediyor, tam rakamı hatırlayamıyor. –

+5

Bu sadece "gerçek bir soru" değil, değerlidir. Limitin 16 ya da 32 ya da yararsızca küçük bir sayı olduğu hemen belli değil. Üstelik, burada sorulan şeyin ne olduğunu söylemek zor değil, belirsizlik, belirsizlik vb. De yoktur. Bu tür soruları kapatacak insanlara, soruların başkalarına verebilecekleri değere biraz daha fazla dikkat etmelerini diliyorum. kendilerine sağlamazlar. Bu soru tam olarak ne istediğimi sordu ve cevaplar çok yardımcı oldu. ESP ile başka nasıl bilmeliydik? Deneyim? omatai

cevap

4

bildiğim sınır yoktur, ancak iki pratik sınırlamaları vardır: yığınlar için

  1. sanal alanı. Örneğin, 32 bitlik süreçte işlemin sanal alanı 4GB'tır, ancak genel kullanım için sadece 2G civarındadır. Varsayılan olarak her iş parçacığı 1MB yığın alanı ayırır, böylece en üst değer 2000 iş parçacığıdır. Doğal olarak, yığının boyutunu değiştirebilir ve daha fazla iş parçacığı sığacak şekilde küçültebilirsiniz (CreateThread numaralı dwStackSize parametresi veya /STACK linker komutunda). 64 bitlik bir sistem kullanırsanız, bu sınır pratik olarak yok olur.
  2. Zamanlayıcı yükü. Binlerce parçayı okuduktan sonra, sadece zamanlama işlemi CPU zamanınızın yaklaşık% 100'ünü yiyecektir, bu yüzden çoğunlukla işe yaramazlar. Bu zor bir sınır değildir, sadece programınız oluşturduğunuz daha fazla iş parçacığı daha yavaş ve yavaş olur.
+0

Eh, iş parçacığı durumuna bağlıdır. 6000 engellenen iş parçacığı makinemin çalışması üzerinde sıfır etkisi vardır. Ayrıca, iş parçacığı hazır/çalışıyor olsa bile, 16 iş parçacığı veya 1600'üm olsaydı çok önemli olurdu - her iki durumda da 4/8 çekirdim. –

+0

@MartinJames: Çekirdek çizelgeleyici tarafından kullanılan algoritmalar, iş parçacığı tablosunun boyutuyla bir sonraki skalada neyin çalıştırılacağına karar verdikleri için. Hiç kuşkusuz detaylar Windows sürümüne göre değişiyor, ama WinXP'de sadece (;;) Sleep (1000) 'i çalıştıran 2000 iş parçacığı oluşturduğumu ve CPU kullanımının% 80'in üzerinde olduğunu hatırlıyorum. – rodrigo

+0

IIRC, readdt iş parçacığı temel olarak iş parçacığı bilgi bloğu işaretçilerinin sıra sıralı bir sıra dizisidir. Bir sıra 2000 girdisi var, ancak yalnızca dört çekirdek varsa, bir zamanlayıcı kesmede iş parçacığı üzerinde dolaşan sadece 'eski' dört iş parçacığı arkaya itmek ve dört 'yeni' olanları önden atmak gerekir - gerçekten önemli değil sıra uzun. Bu uzun sürmeyecek mi? –

1

Gerçek sınır, kullanılabilir bellek miktarı tarafından çeşitli yollarla belirlenir. Windows'da "bu çoktan fazla ipucunuza sahip olamazsınız" sınırı yoktur, ancak sistem içinde ne kadar bellek kullanabileceğinize dair sınırlar vardır ve bu tükendiğinde daha fazla oluşturamazsınız İş Parçacığı.

Mark Russinovich tarafından bu blogu bakınız: http://blogs.technet.com/b/markrussinovich/archive/2009/07/08/3261309.aspx

İlgili konular