কম্পিউটার টিউটোরিয়াল

C#-এ Parallel.ForEach-এ সমান্তরালতা সীমিত করা (MaxDegreeOfParallelism)

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-বাউন্ড টাস্কের জন্য বেশি সেট করা যেতে পারে।

  1. জাভাতে JTextField-এ ক্যারেক্টার সংখ্যা কীভাবে সীমাবদ্ধ করবেন?

  2. LXD কন্টেইনার কত রিসোর্স ব্যবহার করবে সেটি সীমাবদ্ধ করুন

  3. মাস্টার ডেটা ব্যাকআপ: ফাইল রক্ষার প্রমাণিত কৌশল

  4. অ্যান্টিভাইরাস সফটওয়্যার কীভাবে আপনার পিসির পারফরম্যান্স বাড়াতে পারে