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

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

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

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

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

आधुनिक एप्लिकेशन उच्च प्रदर्शन और रिस्पॉन्सिवनेस की मांग करते हैं। C# में कंकरेंसी (concurrency) और मल्टीथ्रेडिंग (multithreading) प्रमुख टूल हैं जो एक साथ कई कार्यों को निष्पादित करने, मल्टी-कोर प्रोसेसर का कुशलतापूर्वक उपयोग करने और उपयोगकर्ता अनुभव को बेहतर बनाने में सक्षम बनाते हैं। इस लेख में, हम क्लासिकल थ्रेड्स से लेकर आधुनिक async/await और Parallel LINQ तक की मुख्य अवधारणाओं को समझेंगे।



मल्टीथ्रेडिंग के बुनियादी सिद्धांत: Thread क्लास और थ्रेड पूल

C# में मल्टीथ्रेडिंग System.Threading.Thread क्लास से शुरू होती है। प्रत्येक थ्रेड प्रक्रिया के अंदर निष्पादन का एक अलग पथ दर्शाता है। हालांकि, मैन्युअल रूप से थ्रेड बनाना एक महंगा ऑपरेशन है। ऑप्टिमाइज़ेशन के लिए थ्रेड पूल (ThreadPool) का उपयोग किया जाता है, जो थ्रेड्स के पुन: उपयोग को प्रबंधित करता है।

मैन्युअल रूप से थ्रेड बनाने का उदाहरण:

using System;using System.Threading;

class Program{ static void Main() { Thread thread = new Thread(DoWork); thread.Start(); Console.WriteLine("मुख्य थ्रेड काम कर रहा है..."); thread.Join(); // समाप्ति की प्रतीक्षा करें }

static void DoWork() { Console.WriteLine("थ्रेड काम कर रहा है।"); }}

सरल उपयोग के लिए ThreadPool अनुशंसित है:

ThreadPool.QueueUserWorkItem(state => {    Console.WriteLine("थ्रेड पूल में कार्य।");});

महत्वपूर्ण: Thread क्लास में लो-लेवल API है और यह परिणाम वापस करने का समर्थन नहीं करता। आधुनिक एप्लिकेशन के लिए Task का उपयोग करें।



Task और TPL (Task Parallel Library)

TPL लाइब्रेरी (System.Threading.Tasks) एक हाई-लेवल एब्स्ट्रैक्शन प्रदान करती है — Task। Task एक एसिंक्रोनस ऑपरेशन को दर्शाता है जो मान वापस कर सकता है। यह C# में आधुनिक कंकरेंसी का आधार है।

बिना मान वापस किए Task का उदाहरण:

using System;using System.Threading.Tasks;

class Program{ static async Task Main() { Task task = Task.Run(() => DoWork()); await task; Console.WriteLine("पूर्ण हुआ।"); }

static void DoWork() { Console.WriteLine("Task में कार्य।"); }}

मान वापस करने वाला Task:

Task<int> task = Task.Run(() => {    int result = 0;    for (int i = 0; i < 1000000; i++) result += i;    return result;});int sum = await task;Console.WriteLine($"योग: {sum}");

TPL में कलेक्शन की समानांतर प्रोसेसिंग के लिए Parallel.For और Parallel.ForEach भी शामिल हैं:

Parallel.For(0, 10, i => {    Console.WriteLine($"थ्रेड {Thread.CurrentThread.ManagedThreadId} पर पुनरावृत्ति {i}");});


Async/await: एसिंक्रोनस प्रोग्रामिंग

async और await कीवर्ड एसिंक्रोनस कोड लिखने को सरल बनाते हैं, इसे सिंक्रोनस जैसा बनाते हैं। ये नए थ्रेड नहीं बनाते, बल्कि निष्पादन संदर्भ को कुशलतापूर्वक स्विच करते हैं, अन्य कार्यों के लिए थ्रेड को मुक्त करते हैं।

एसिंक्रोनस मेथड का उदाहरण:

using System;using System.Net.Http;using System.Threading.Tasks;

class Program{ static async Task Main() { string data = await FetchDataAsync("https://example.com"); Console.WriteLine(data); }

static async Task<string> FetchDataAsync(string url) { using HttpClient client = new HttpClient(); string result = await client.GetStringAsync(url); return result; }}

उपयोग के नियम:

  • async वाला मेथड Task, Task<T> या void (केवल इवेंट हैंडलर के लिए) वापस करना चाहिए।
```

ब्लॉग

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