C# में समवर्तीता और मल्टीथ्रेडिंग: Thread से async/await तक
आधुनिक एप्लिकेशन तेजी से कई कार्यों के एक साथ निष्पादन की मांग करते हैं: वेब सर्वर द्वारा अनुरोधों को संसाधित करने से लेकर डेस्कटॉप प्रोग्राम में समानांतर गणना तक। C# (.NET) में इसके लिए एक शक्तिशाली शस्त्रागार मौजूद है - क्लासिकल थ्रेड्स (Thread) से लेकर उच्च-स्तरीय निर्माण async/await और लाइब्रेरी Task Parallel Library (TPL) तक। इस लेख में, हम समवर्तीता और मल्टीथ्रेडिंग की प्रमुख अवधारणाओं, उनके व्यावहारिक अनुप्रयोग और सर्वोत्तम प्रथाओं पर चर्चा करेंगे।
समवर्तीता और मल्टीथ्रेडिंग क्या है?
कोड पर जाने से पहले, इन अवधारणाओं के बीच अंतर को समझना महत्वपूर्ण है:
- समवर्तीता (Concurrency) — कार्यक्रम की कई कार्यों को निष्पादित करने की क्षमता, उनके बीच स्विच करके, एक साथ निष्पादन का भ्रम पैदा करना। इसे एक प्रोसेसर कोर पर भी लागू किया जा सकता है।
- मल्टीथ्रेडिंग (Multithreading) — समवर्तीता का एक रूप जिसमें कई थ्रेड्स (threads) मल्टी-कोर प्रोसेसर पर भौतिक रूप से एक साथ निष्पादित होते हैं।
- समानांतरता (Parallelism) — मल्टीथ्रेडिंग का एक उपसमूह, जब किसी कार्य के विभिन्न भाग विभिन्न कोर पर सख्ती से एक साथ निष्पादित होते हैं।
C# में, आप निम्न-स्तरीय थ्रेड्स और ऐसे एब्स्ट्रैक्शन दोनों का उपयोग कर सकते हैं जो स्वचालित रूप से थ्रेड्स का प्रबंधन करते हैं। चुनाव कार्य पर निर्भर करता है: I/O-bound संचालन (फ़ाइलों, नेटवर्क के साथ काम) के लिए async/await बेहतर उपयुक्त है, और CPU-bound (गणना) के लिए — Parallel.For या Task।
थ्रेड्स का निर्माण और प्रबंधन: Thread क्लास
क्लास System.Threading.Thread C# में थ्रेड्स के साथ काम करने का सबसे निचला स्तर का तरीका है। यह पूर्ण नियंत्रण देता है, लेकिन सावधानीपूर्वक सिंक्रोनाइज़ेशन की आवश्यकता होती है।
using System;using System.Threading;
class Program{ static void Main() { Thread thread = new Thread(DoWork); thread.Start();
// मुख्य थ्रेड काम करना जारी रखता है for (int i = 0; i < 5; i++) { Console.WriteLine($"मुख्य थ्रेड: {i}"); Thread.Sleep(100); }
thread.Join(); // चाइल्ड थ्रेड के पूरा होने की प्रतीक्षा करें Console.WriteLine("काम पूरा हुआ।"); }
static void DoWork() { for (int i = 0; i < 5; i++) { Console.WriteLine($"चाइल्ड थ्रेड: {i}"); Thread.Sleep(150); } }}मैन्युअल थ्रेड प्रबंधन की समस्याएं:
- सिंक्रोनाइज़ेशन की जटिलता (डेटा रेस, डेडलॉक)।
- थ्रेड्स बनाने और नष्ट करने पर उच्च ओवरहेड।
- परिणाम लौटाने के लिए अंतर्निहित समर्थन का अभाव।
इसलिए, आधुनिक C# में Task Parallel Library को प्राथमिकता दी जाती है।
Task Parallel Library (TPL) और async/await
नेमस्पेस System.Threading.Tasks से क्लास Task एक एसिंक्रोनस ऑपरेशन का प्रतिनिधित्व करता है। कीवर्ड async और await के साथ मिलकर, यह एसिंक्रोनस कोड लिखने की अनुमति देता है जो सिंक्रोनस दिखता है।
Task के साथ बुनियादी उदाहरण
using System;using System.Threading.Tasks;
class Program{ static async Task Main() { Console.WriteLine("काम शुरू।");
// एक एसिंक्रोनस टास्क शुरू करें Task<int> task = CalculateAsync(10);
// जब तक टास्क निष्पादित हो रहा है, हम कुछ और कर सकते हैं Console.WriteLine("दूसरा काम कर रहे हैं...");
// परिणाम की प्रतीक्षा करें int result = await task; Console.WriteLine($"परिणाम: {result}"); }
static async Task<int> CalculateAsync(int number) { await Task.Delay(1000); // लंबी अवधि के ऑपरेशन का अनुकरण return number * number; }}
ब्लॉग
पुस्तक अनुशंसाएँ
यह भी पढ़ें
PHP बनाम Python बैकएंड के लिए: 2025 में क्या चुनें?
जावास्क्रिप्ट में JSON के साथ काम करना: शुरुआती लोगों के लिए पार्सिंग और सीरियलाइज़ेशन
Swift में HTTP क्लाइंट: सही तरीके से अनुरोध करना
30 मिनट में PHP पर REST API कैसे लिखें: चरण-दर-चरण मार्गदर्शिका
PHP हैकाथॉन: शुरुआत से जीतने और जूरी को प्रभावित करने का तरीका