C# में समवर्तीता और मल्टीथ्रेडिंग: A से Z तक — पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: C# में समवर्तीता की आवश्यकता क्यों है?

\n

आधुनिक एप्लिकेशन को अक्सर एक साथ कई ऑपरेशन निष्पादित करने की आवश्यकता होती है। उपयोगकर्ता उम्मीद करता है कि डेटा लोड करते समय इंटरफ़ेस "फ्रीज़" नहीं होगा, और सर्वर समानांतर में हजारों अनुरोधों को संसाधित कर सकेगा। C# (.NET) में इन समस्याओं को हल करने के लिए समवर्तीता का उपयोग किया जाता है — ओवरलैपिंग समय अंतराल में कई कार्यों को निष्पादित करने की प्रोग्राम की क्षमता, और मल्टीथ्रेडिंग — निष्पादन के कई थ्रेड्स का उपयोग करके समवर्तीता का कार्यान्वयन।

\n

इस लेख में, हम मुख्य अवधारणाओं पर चर्चा करेंगे: बुनियादी Thread से लेकर आधुनिक async/await और Parallel तक। आप सीखेंगे कि प्रत्येक कार्य के लिए सही उपकरण कैसे चुनें और सामान्य गलतियों जैसे डेडलॉक और रेस कंडीशन से कैसे बचें।

\n\n

1. मूल बातें: Thread और ThreadPool

\n

Thread के माध्यम से थ्रेड्स के साथ काम करना

\n

क्लास System.Threading.Thread थ्रेड बनाने का सबसे निम्न-स्तरीय तरीका है। प्रत्येक थ्रेड का अपना स्टैक होता है और स्वतंत्र रूप से निष्पादित होता है। थ्रेड बनाने और शुरू करने का उदाहरण:

\n
using System;\nusing System.Threading;\n\nclass Program\n{\n    static void Main()\n    {\n        Thread thread = new Thread(DoWork);\n        thread.Start();\n        \n        // मुख्य थ्रेड काम करना जारी रखता है\n        for (int i = 0; i < 5; i++)\n        {\n            Console.WriteLine($"मुख्य थ्रेड: {i}");\n            Thread.Sleep(100);\n        }\n        \n        thread.Join(); // चाइल्ड थ्रेड के पूरा होने की प्रतीक्षा करें\n    }\n\n    static void DoWork()\n    {\n        for (int i = 0; i < 5; i++)\n        {\n            Console.WriteLine($"कार्य थ्रेड: {i}");\n            Thread.Sleep(150);\n        }\n    }\n}
\n

महत्वपूर्ण: नया थ्रेड बनाना एक महंगा ऑपरेशन है। बार-बार अल्पकालिक थ्रेड बनाने के लिए ThreadPool का उपयोग करना बेहतर है।

\n\n

ThreadPool — थ्रेड पूल

\n

ThreadPool कार्य थ्रेड्स के एक सेट का प्रबंधन करता है जिनका पुन: उपयोग किया जाता है। यह मैन्युअल रूप से Thread बनाने की तुलना में अधिक कुशल है। उदाहरण:

\n
ThreadPool.QueueUserWorkItem(state =>\n{\n    Console.WriteLine("कार्य थ्रेड पूल में निष्पादित हो रहा है");\n    Thread.Sleep(500);\n    Console.WriteLine("कार्य पूर्ण हुआ");\n});\n\nConsole.WriteLine("मुख्य थ्रेड काम करना जारी रखता है");\nConsole.ReadKey();
\n

सीमा: आप पूल से थ्रेड की प्राथमिकता या नाम को सीधे नियंत्रित नहीं कर सकते। अधिक सूक्ष्म नियंत्रण के लिए Task का उपयोग करें।

\n\n

2. Task और Task Parallel Library (TPL)

\n

Task — आधुनिक दृष्टिकोण

\n

.NET 4.0 से शुरू करके, Task एसिंक्रोनस ऑपरेशन के लिए मुख्य उपकरण बन गया है। यह थ्रेड्स को एब्स्ट्रैक्ट करता है और निष्पादन के परिणामों के साथ काम करने की अनुमति देता है। उदाहरण:

\n
using System;\nusing System.Threading.Tasks;\n\nclass Program\n{\n    static async Task Main()\n    {\n        Task<int> task = Task.Run(() => ComputeResult(10));\n        \n        // अन्य काम किया जा सकता है\n        Console.WriteLine("परिणाम की प्रतीक्षा कर रहे हैं...");\n        \n        int result = await task;\n        Console.WriteLine($"परिणाम: {result}");\n    }\n\n    static int ComputeResult(int value)\n    {\n        Task.Delay(1000).Wait(); // लंबे ऑपरेशन का अनुकरण\n        return value * 2;\n    }\n}
\n

मुख्य लाभ:

\n
    \n
  • Task<T> के माध्यम से परिणाम लौटाता है
  • \n
  • CancellationToken के माध्यम से रद्दीकरण का समर्थन करता है
  • \n
  • कार्यों को संयोजित करने की अनुमति देता है (ContinueWith, WhenAll, WhenAny)
  • \n
  • async/await के साथ एकीकृत है
  • \n
\n\n

Parallel — समानांतर लूप के लिए

\n

क्लास Parallel समानांतरीकरण के साथ लूप के निष्पादन को सरल बनाता है। उदाहरण:

\n
using System;\nusing System.Threading.Tasks;\n\nclass Program\n{\n    static void Main()\                

ब्लॉग

पुस्तक अनुशंसाएँ