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

C# में Multithreading (मल्टीथ्रेडिंग) क्या है?

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 उपयोग करें।

  1. C# ASP.NET MVC में ChildActionOnly एट्रिब्यूट का उपयोग क्या है? C# ASP.NET MVC में ChildActionOnly एट्रिब्यूट का उपयोग क्या है?

    Child Action केवल चाइल्ड रिक्वेस्ट द्वारा एक्सेसिबल होता है। यह URL रिक्वेस्ट्स का जवाब नहीं देगा। यदि कोई प्रयास किया जाता है, तो रनटाइम एरर फेंका जाएगा - Child action is accessible only by a child request। चाइल्ड एक्शन मेथड्स को व्यू से Action() और RenderAction() HTML हेल्पर्स का उपयोग करके चाइल्ड

  1. Java में SwingWorker क्लास का महत्व क्या है Java में SwingWorker क्लास का महत्व क्या है

    एक SwingWorker क्लास हमें एक वर्कर थ्रेड में एक असिंक्रोनस टास्क (जैसे लंबे समय तक चलने वाला टास्क) करने में सक्षम बनाती है फिर टास्क परिणामों के आधार पर इवेंट डिस्पैच थ्रेड (EDT) से Swing कंपोनेंट्स को अपडेट करती है। इसे Java 1.6 संस्करण में पेश किया गया था।SwingWorker क्लासjava.swing.SwingWorker क

  1. Java में SwingUtilities क्लास का महत्व क्या है? Java में SwingUtilities क्लास का महत्व क्या है?

    Java में, स्विंग कंपोनेंट्स स्क्रीन पर प्रदर्शित होने के बाद, केवल एक थ्रेड द्वारा संचालित किए जा सकते हैं जिसे इवेंट हैंडलिंग थ्रेड कहा जाता है। हम अपना कोड एक अलग ब्लॉक में लिख सकते हैं और इस ब्लॉक का रेफरेंस इवेंट हैंडलिंग थ्रेड को दे सकते हैं। SwingUtilities क्लास में दो महत्वपूर्ण स्टेटिक मेथड्