Parallel.ForEach ve PLINQ
Parallel.ForEach ile işleri paralel çalıştırın ve PLINQ (AsParallel, WithDegreeOfParallelism, AsOrdered) ile paralel işlem hatları oluşturun.
Parallel.ForEach ve PLINQ, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 3 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 3 dersten oluşur.
Paralel döngüler neden kullanılır
Hedef: CPU'yu daha iyi kullanın.
- Parallel.ForEach: öğe başına işlem
- PLINQ: işleçlere sahip paralel sorgu
- Paralellik derecesini denetleyin
- Yan etkilere karşı dikkatli olun
Parallel.ForEach temelleri
Parallel.ForEach, yinelemeleri iş parçacıkları arasında dağıtır; her öğe verilen işlemi çalıştırır.
using System;
using System.Threading.Tasks;
public class Program
{
public static void Main(string[] args)
{
int[] data = new int[] { 1, 2, 3, 4, 5, 6 };
// Runs iterations concurrently on thread pool
Parallel.ForEach(data, x =>
{
int y = x * x; // small CPU work
Console.WriteLine("x=" + x + " y=" + y + " on " + Environment.CurrentManagedThreadId);
});
}
}
Paralelliği denetleme
Kaynaklar kısıtlı olduğunda eşzamanlılığı sınırlamak için ParallelOptions.MaxDegreeOfParallelism kullanın.
using System;
using System.Threading;
using System.Threading.Tasks;
public class Program
{
public static void Main(string[] args)
{
int[] data = new int[] { 1, 2, 3, 4, 5, 6 };
ParallelOptions opt = new ParallelOptions();
opt.MaxDegreeOfParallelism = 2; // limit concurrency
Parallel.ForEach(data, opt, x =>
{
Console.WriteLine("Start " + x);
Thread.Sleep(150); // simulate work
Console.WriteLine("Done " + x);
});
}
}
PLINQ işlem hattı
PLINQ, LINQ işleçlerini paralel olarak çalıştırır. ForAll, sonuçları eşzamanlı ve sırasız biçimde tüketir.
using System;
using System.Linq;
public class Program
{
public static void Main(string[] args)
{
int[] nums = Enumerable.Range(1, 20).ToArray();
// Filter then project in parallel
var query =
nums
.AsParallel()
.WithDegreeOfParallelism(2)
.Where(n => n % 2 == 0)
.Select(n => n * n);
// ForAll consumes in parallel; order not guaranteed
query.ForAll(sq => Console.WriteLine(sq));
}
}
Sıralama denetimleri
Sırayı korumak için AsOrdered kullanın; gerektiğinde tek iş parçacıklı LINQ'e dönmek için AsSequential kullanın.
using System;
using System.Linq;
public class Program
{
public static void Main(string[] args)
{
int[] nums = new int[] { 5, 4, 3, 2, 1 };
// Preserve original sequence order for the output
var ordered =
nums.AsParallel().AsOrdered().Select(n => n * 10).ToArray();
// Switch back to sequential for a section if needed
var seq =
nums.AsParallel().Select(n => n + 1).AsSequential().Where(n => n > 3).ToArray();
Console.WriteLine("Ordered: " + string.Join(",", ordered));
Console.WriteLine("Sequential tail: " + string.Join(",", seq));
}
}
Güvenlik ve ipuçları
İpuçları:
- Paylaşılan değiştirilebilir durumdan kaçının; saf işlevleri tercih edin.
- Yazmanız gerekiyorsa iş parçacığı güvenli koleksiyonlar kullanın.
- Küçük iş öğeleri yerine daha büyük toplu işler kullanın.
- Ölçüm yapın: paralellik, G/Ç bekleyen işlere değil CPU'ya bağlı işlere yardımcı olur.
Parallel.ForEach ve PLINQ karşılaştırması
Özet
Özet: Öğe başına işlemler için Parallel.ForEach kullanın; paralel sorgular oluşturmak, eşzamanlılığı denetlemek ve isteğe bağlı olarak sırayı korumak için PLINQ kullanın.
Sıkça Sorulan Sorular
“Parallel.ForEach ve PLINQ” dersi ücretsiz mi?
Evet — “Parallel.ForEach ve PLINQ” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 3 dersten oluşur.
“Parallel.ForEach ve PLINQ” dersinde ne öğreneceğim?
Parallel.ForEach ile işleri paralel çalıştırın ve PLINQ (AsParallel, WithDegreeOfParallelism, AsOrdered) ile paralel işlem hatları oluşturun. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C# Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 3 dersinin 1. dersidir.
“Parallel.ForEach ve PLINQ” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Parallel.ForEach ve PLINQ
- Kanallarla üretici/tüketici (genel bakış)
- İş hacmi ve gecikme ödünleşimleri