17 Şubat 2015 Salı

PLINQ

PLINQ
PLINQ yazısına taşıdım.

Parallel Sınıfı
Bu sınıf ile PLINQ ayrı şeyler ancak benzer işler yaptıkları için aynı sayfaya koymanın doğru olacağını düşündüm.
Parallel
Bu sınıf paralel çalışabilen döngülerin gerçekleştirildiği yer. Zaten 3 tane metodu var. For(), ForEach() ve Invoke()

ForEach
Bu metod Parallel sınıfının bir metodu ve verilen IEnumerable parametresindeki her bir eleman için paralel işlem yapabilmemizi sağlıyor. Bu metodun bir çok overload edilmiş hali bulunuyor. En basit imzalı metod aşağıda.


Bu metod ile PLINQ.ForAll metodları benzeşiyorlar. Bu metodu kullanırken dikkat edilmesi gereken bir nokta metodu çağıran thread'in de foreach döngüsünden bir tanesi için kullanıldığı. Dolayısıyla GUI thread'inden çağırılırsa burada anlatıldığı gibi kullanıcı arayüzü donabilir. Çözüm olarak ForEach döngüsünü çağıran kodu Task.Factory.StartNew metodu ile çağırmak önerilmiş.
Burada verilen örnekte Parallel kütüphanesinin ThreadPool sınıfı ile direkt çalışmaktan daha kolay olduğu görülebilir. 


Invoke
Bu metod ile verilen Action nesneleri paralel olarak çalıştırılır. Aşağıda bir örnek bulunuyor.


ParallelOptions
ParallelOptions sınıfı ile yukarıda PLINQ ile anlatılan kaç tane çekirdeğin kullanılacağını atamak mümkün.
var parallelOptions = new ParallelOptions();
parallelOptions.MaxDegreeOfParallelism = Math.Max(Environment.ProcessorCount / 2, 1);

Hiç yorum yok:

Yorum Gönder