C Sharp Parallel For ve Parallel Foreach nedir ?

  1. tirabzonlu
    9
    90
    8.7.2018 16:40:00

    Bu Parallel.ForEach ve Parallel.For döngülerinin , normal for ve foreach den farkı nedir ? Devraldığım projede bunları da gördüm , teşekkürler yardımlarınız için.

    c# .net 2 ay önce 99 Görüntüleme
    • black mirror Birden Ona kadar sıralı veri içeren bir diziyi , önce for - foreach ile sonra da parallel.foreach parallel.for ile yazdır bir farkı göreceksin :)

    • Yorum Ekleyin

( 1 ) Cevap

  1. black mirror
    5
    2139
    24.7.2018 22:10:00

    for ve foreach single thread çalışırken , Parallel.ForEach ve Parallel.For multi thread çalışır. Haliyle normal for ve foreach e göre daha hızlıdır.

    Tabi bu hız farkı , birden ona kadar olan bir diziyi yazdırıken çok belli olmaz , hatta normal for foreach daha hızlı bile olabilir.

    Ancak bir mb lık 50 tane resmi download ettiğimizi varsayalım , ve saniyede bir tanesinin indiğini düşünelim.Normal for / foreach de 50 resim 50 saniyede inerken , 4 çekirdekli bir pc mizde 50 resim 12.5 saniyede inmez mi ?

    Not : parallel for foreach asenkron / multi thread çalıştığı için , list gibi koleksiyonlarda hangi itemın ne zaman çalışacağının bir sırası yoktur , bu yüzden aşağıda ki örnekte olduğu gibi , paralel foreach de karışık sırada ekrana yazdırılır.

    List<int> nums=new List<int>(new []{ 1,2,3,4,5,6,7,8,9 });
    
    Console.WriteLine("foreach");
    
    foreach (var item in nums)
    {
        Console.WriteLine(item +"- Thread: "+ Thread.CurrentThread.ManagedThreadId);
    }
    
    Console.WriteLine("Parallel.ForEach");
    
    Parallel.ForEach(nums, item =>
    {
        Console.WriteLine(item + "- Thread: " + Thread.CurrentThread.ManagedThreadId);
    });
    
    
    Console.ReadLine();
    

    Çıktı:

    foreach
    1- Thread: 10
    2- Thread: 10
    3- Thread: 10
    4- Thread: 10
    5- Thread: 10
    6- Thread: 10
    7- Thread: 10
    8- Thread: 10
    9- Thread: 10
    Parallel.ForEach
    1- Thread: 10
    2- Thread: 10
    4- Thread: 10
    5- Thread: 10
    3- Thread: 6
    7- Thread: 6
    8- Thread: 6
    9- Thread: 6
    6- Thread: 10
    

    benim bilgisayarımda Parallel.ForEach 2 threadle çalıştı. İşlemci ve çekirdek sayısı yüksek bilgisayarlarda bu rakam artacaktır

Cevabınız