C# में मल्टीथ्रेडिंग
मल्टीथ्रेडिंग एक प्रोग्राम में एक साथ कई एक्सीक्यूशन पाथ्स (थ्रेड्स) चलाने की क्षमता है। System.Threading.Thread क्लास थ्रेड्स बनाने और प्रबंधित करने के लिए उपयोग होती है।
मुख्य अवधारणाएं
- मेन थ्रेड: प्रोग्राम शुरू होने पर स्वचालित रूप से बनता है (
Thread.CurrentThread)। - चाइल्ड थ्रेड्स:
new Thread(ThreadStart)से बनाए गए थ्रेड्स। - थ्रेड लाइफसाइकल: Unstarted → Running → (WaitSleepJoin/Suspended) → Stopped।
उदाहरण 1: करंट थ्रेड नाम दिखाना
using System;
using System.Threading;
class Program {
static void Main() {
Thread mainThread = Thread.CurrentThread;
mainThread.Name = "MainThread";
Console.WriteLine($"This is {mainThread.Name}");
}
}
उदाहरण 2: चाइल्ड थ्रेड बनाना और प्रबंधित करना
using System;
using System.Threading;
namespace MultithreadingApp {
class Program {
public static void ChildThreadWork() {
Console.WriteLine("Child thread starts");
int sleepMs = 5000;
Console.WriteLine($"Child Thread Paused for {sleepMs/1000} seconds");
Thread.Sleep(sleepMs); // 5 सेकंड रुकें
Console.WriteLine("Child thread resumes");
}
static void Main() {
ThreadStart childRef = new ThreadStart(ChildThreadWork);
Console.WriteLine("In Main: Creating the Child thread");
Thread childThread = new Thread(childRef);
childThread.Start(); // थ्रेड शुरू करें
Console.WriteLine("Main thread continues...");
Console.ReadKey(); // मेन थ्रेड रुका रहे ताकि चाइल्ड पूरा हो सके
}
}
}
आउटपुट
In Main: Creating the Child thread Child thread starts Child Thread Paused for 5 seconds Main thread continues... Child thread resumes
महत्वपूर्ण मेथड्स/प्रॉपर्टीज
| मेंबर | विवरण |
|---|---|
Start() | थ्रेड शुरू करता है |
Sleep(ms) | वर्तमान थ्रेड को निर्दिष्ट मिलीसेकंड्स के लिए रोकता है |
Join() | कॉलिंग थ्रेड को तब तक ब्लॉक करता है जब तक यह थ्रेड समाप्त न हो जाए |
Abort() | थ्रेड समाप्त करता है (अप्रचलित, खतरनाक) |
IsAlive | थ्रेड चल रहा है? |
IsBackground | बैकग्राउंड थ्रेड? (ऐप एग्जिट को ब्लॉक नहीं करता) |
Priority | थ्रेड प्रायोरिटी (Lowest..Highest) |
Name | डीबगिंग के लिए नाम |
आधुनिक विकल्प (अनुशंसित)
- Task Parallel Library (TPL):
Task.Run(() => ...),Parallel.For,PLINQ। - async/await: नॉन-ब्लॉकिंग एसिंक्रोनस प्रोग्रामिंग।
- ThreadPool: शॉर्ट-लिव्ड ऑपरेशन्स के लिए थ्रेड पूल।
- Concurrent Collections: थ्रेड-सेफ कलेक्शंस।
चेतावनी: Thread.Abort() अप्रचलित है और डेडलॉक्स/करप्शन का कारण बन सकता है। कैंसिलेशन के लिए CancellationToken उपयोग करें।