Parallel.ForEach vs Foreach
- Parallel.ForEach: একাধিক থ্রেডে রান করে, প্রসেসিং প্যারালেলি হয়। C# 4.0+ এ উপলব্ধ।
System.Threading.Tasksনেমস্পেস দরকার। - Foreach: একক থ্রেডে রান করে, সিকোয়েনশিয়ালি। C# 1.0 থেকেই আছে। সাধারণত ধীর।
উদাহরণ ১: Parallel.ForEach বনাম Foreach পারফরম্যান্স
static void Main(string[] args)
{
List<string> alphabets = new List<string>();
for (char c = 'A'; c <= 'Z'; c++) alphabets.Add(c.ToString());
Console.WriteLine("Printing list using foreach loop\n");
var stopWatch = Stopwatch.StartNew();
foreach (string alphabet in alphabets)
{
Console.WriteLine("alphabet Name: {0}, Thread Id= {1}", alphabet, Thread.CurrentThread.ManagedThreadId);
}
Console.WriteLine("foreach loop execution time = {0} seconds\n", stopWatch.Elapsed.TotalSeconds);
Console.WriteLine("Printing list using Parallel.ForEach");
stopWatch = Stopwatch.StartNew();
Parallel.ForEach(alphabets, alphabet =>
{
Console.WriteLine("alphabet Name: {0}, Thread Id= {1}", alphabet, Thread.CurrentThread.ManagedThreadId);
});
Console.WriteLine("Parallel.ForEach() execution time = {0} seconds", stopWatch.Elapsed.TotalSeconds);
Console.ReadLine();
}
উদাহরণ ২: MaxDegreeOfParallelism দিয়ে সমান্তরালতা সীমিত করা
static class Program
{
static void Main(string[] args)
{
List<string> alphabets = new List<string>();
for (char c = 'A'; c <= 'Z'; c++) alphabets.Add(c.ToString());
Parallel.ForEach(
alphabets,
new ParallelOptions { MaxDegreeOfParallelism = 2 }, // সর্বোচ্চ ২ থ্রেড
alphabet => {
Console.WriteLine("alphabet Name: {0}, Thread Id= {1}", alphabet, Thread.CurrentThread.ManagedThreadId);
});
}
}
আউটপুট (সীমিত)
alphabet Name: N, Thread Id= 4
alphabet Name: O, Thread Id= 4
alphabet Name: P, Thread Id= 4
alphabet Name: A, Thread Id= 1
alphabet Name: B, Thread Id= 1
alphabet Name: C, Thread Id= 1
... (সর্বোচ্চ ২ থ্রেড ব্যবহার হয়েছে)
ব্যাখ্যা: ParallelOptions.MaxDegreeOfParallelism সেট করলে সমকালীন থ্রেডের সংখ্যা কন্ট্রোল করা যায়। CPU-বাউন্ড টাস্কের জন্য লজিক্যাল প্রসেসরের সংখ্যা (Environment.ProcessorCount) সেট করা ভালো। I/O-বাউন্ড টাস্কের জন্য বেশি সেট করা যেতে পারে।