Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C#

C# में थ्रेड पूल (Thread Pool) - पूर्ण गाइड


परिचय

थ्रेड पूल (System.Threading.ThreadPool) प्री-क्रिएटेड वर्कर थ्रेड्स का संग्रह है जो बैकग्राउंड कार्य निष्पादित करता है। थ्रेड निर्माण/विनाश का ओवरहेड बचाता है।

मुख्य मेथड्स

  • QueueUserWorkItem(WaitCallback): कार्य कतार में डालें।
  • SetMinThreads/SetMaxThreads: सीमा समायोजित करें।
  • GetAvailableThreads: उपलब्ध थ्रेड्स जांचें।

उदाहरण

using System;
using System.Threading;

class Program
{
    static void Main()
    {
        Console.WriteLine("Main thread: {0}", Thread.CurrentThread.ManagedThreadId);

        for (int i = 0; i < 5; i++)
        {
            int taskNum = i;
            ThreadPool.QueueUserWorkItem(_ => DoWork(taskNum));
        }

        Console.WriteLine("All tasks queued. Press Enter to exit.");
        Console.ReadLine();
    }

    static void DoWork(int taskNum)
    {
        int id = Thread.CurrentThread.ManagedThreadId;
        Console.WriteLine("Task {0} on thread {1} started", taskNum, id);
        Thread.Sleep(500);
        Console.WriteLine("Task {0} on thread {1} finished", taskNum, id);
    }
}

आउटपुट नमूना

Main thread: 1
All tasks queued. Press Enter to exit.
Task 0 on thread 4 started
Task 1 on thread 5 started
Task 2 on thread 6 started
Task 3 on thread 4 started
Task 4 on thread 5 started
Task 0 on thread 4 finished
...

सर्वोत्तम अभ्यास

  • लघु, CPU-बाउंड कार्यों के लिए उपयुक्त।
  • लंबे/ब्लॉकिंग कार्यों (I/O, स्लीप) के लिए नहीं; थ्रेड पूल थकावट का कारण।
  • आधुनिक C#: Task.Run, async/await, Parallel.ForEach प्राथमिकता दें।
  • ThreadPool.SetMinThreads वार्म-अप के लिए (उदाहरण: बर्स्ट लोड)।
  1. - C# में थ्रेड को समाप्त करना (Kill/Stop)

    महत्वपूर्ण: .NET में Thread.Abort() मेथड अप्रचलित (obsolete) है और इसका उपयोग नहीं करना चाहिए क्योंकि यह अप्रत्याशित व्यवहार और संसाधन लीक का कारण बन सकता है। सही दृष्टिकोण: कैंसिलेशन टोकन/फ्लैग पैटर्न थ्रेड को सुरक्षित रूप से रोकने के लिए एक शेयर्ड फ्लैग (या CancellationToken) का उपयोग करें जिसे थ

  1. - C# में वर्तमान थ्रेड की प्राथमिकता प्रदर्शित करना

    C# में प्रत्येक थ्रेड की एक प्राथमिकता (Priority) होती है जो OS शेड्यूलर को बताती है कि इसे कितना CPU समय देना है। Thread.Priority प्रॉपर्टी इसे पढ़ने/सेट करने के लिए उपयोग होती है। थ्रेड प्राथमिकता स्तर प्राथमिकता विवरण ThreadPriority.Highest सबसे अधिक CPU समय ThreadPriority.AboveNormal स

  1. - Java में थ्रेड पूल

    एक थ्रेड पूल पूर्व-आरंभिक थ्रेड्स का संग्रह है। थ्रेड पूल के पीछे सामान्य योजना विधि स्टार्टअप पर कई थ्रेड्स बनाना और उन्हें एक पूल में रखना है, जहां वे बैठते हैं और काम की प्रतीक्षा करते हैं। जब एक सर्वर भागीदारी के लिए कॉल प्राप्त करता है, तो यह इस पूल से एक थ्रेड को जगाता है—यदि कोई उपलब्ध है—और