2012-11-18 17 views
5

YazarkenParalel ve iş bölümü C#?</p> <pre><code>Parallel.For(0, 100, (i,state) => { Console.WriteLine(i); }); </code></pre> <p>Sorular:

(ı 10 çekirdeğe sahip varsayalım)

  1. her çekirdek sayıların miktarını atama formülü nedir

    ? (Bu 100/10 mi?) Yürütme noktada

  2. , her çekirdek zaten hangi numaralar biliyor halledeceğim olduğunu? Yoksa [0..100] deposundan her yeni bir numarayı tüketir mi (şimdilik öbek veya aralığı göz ardı edelim)?

  3. i parametresi - 0..100 dizinine atıfta bulunur mu yoksa her bir iş parçacığındaki göreli bir dizin ve "işlenecek" sayıları mı?

+0

Giriş bölümlendirmenin nasıl yapıldığını soruyorsunuz, ancak 'Paralel' bölümleme için kullandığı iki yolu (yığın ve aralık bölümleme) görmezden gelmemizi mi söylüyorsunuz? Bu benim için hiçbir şey ifade etmiyor. – svick

+0

@svick hem aralıklı hem de yığın tüketir [n] elemanlar n <= 1. [N] 'nin değerini umursamıyorum. ama eğer çok önemliyse, n = 1 olduğunu varsayalım. –

cevap

3
  1. O belgelenmiştir. Muhtemelen işçi görevleri, paylaşılan bir iş havuzundan iş parçalarını kontrol eder. Muhtemelen 10 maddeden daha azını aldıkları için, 10 maddeyi almak, Parallel.For işleminin sonuna yakın iş başında olan 10 iş parçasından daha azına neden olacaktır. Tek bir yavaş iplik, sıralı bir darboğaz yaratabilir, çünkü hala çalışan tek iş parçacığı olabilir. Bu tür darboğazların daha küçük hale gelmesi için işi daha küçük parçalara ayırmak daha iyidir.

  2. Bilmiyorum. Eminim ki bu bilgiyi Reflektör'ü kullanarak kullanmak zorunda kalacağım.

  3. Genel dizini belirtir, böylece paylaşılan bir listeye veya başka bir öğeye erişmek için bunu kullanabilirsiniz. İş temsilciniz tarafından görülmüş olan her bir i, benzersiz olacaktır.