কম্পিউটার টিউটোরিয়াল

C#-এ সিঙ্ক্রোনাইজেশন ও থ্রেড পুলিং (ThreadPool)

মাল্টিথ্রেডিং-এ রিসোর্স সিঙ্ক্রোনাইজেশন এবং থ্রেড ম্যানেজমেন্টের জন্য C#-এ lock, Mutex, ThreadPool ক্লাসগুলো ব্যবহৃত হয়।

1. ThreadPool: কার্যকর থ্রেড ম্যানেজমেন্ট

ThreadPool হল একটি থ্রেড সংগ্রহ যা বেকগ্রাউন্ড কাজের জন্য থ্রেড পুনঃব্যবহার করে। নতুন থ্রেড তৈরি/নষ্ট করার ওভারহেড কমায়।

ব্যবহার


using System.Threading;

ThreadPool.QueueUserWorkItem(state => 
{
    // ব্যাকগ্রাউন্ড টাস্ক
    Console.WriteLine("ThreadPool থ্রেডে কাজ চলছে...");
});

2. lock: সহজ সিঙ্ক্রোনাইজেশন


private static readonly object _lock = new object();

lock (_lock)
{
    // ক্রিটিক্যাল সেকশন
}

3. Mutex: প্রসেস-ক্রস সিঙ্ক্রোনাইজেশন


Mutex mutex = new Mutex(false, "Global\\MyMutex");
mutex.WaitOne();
// ক্রিটিক্যাল সেকশন
mutex.ReleaseMutex();

ThreadPool সেটিংস


// মিন/ম্যাক্স থ্রেড সেট
ThreadPool.SetMinThreads(4, 4);
ThreadPool.SetMaxThreads(100, 100);

// বর্তমান উপলব্ধ থ্রেড
ThreadPool.GetAvailableThreads(out int worker, out int io);

সারসংক্ষেপ

টেকনিকব্যবহার কেসস্কোপ
ThreadPoolছোট বেকগ্রাউন্ড টাস্ক, I/O বাউন্ডপ্রসেস-লোকাল
lockসরল ক্রিটিক্যাল সেকশনপ্রসেস-লোকাল
Mutexপ্রসেস-ক্রস, নামযুক্ত সিঙ্ক্রোনাইজেশনসিস্টেম-ওয়াইড

সেরা অনুশীলন

  • CPU-বাউন্ড লম্বা টাস্কের জন্য Task.Run বা ডেডিকেটেড থ্রেড ভালো।
  • I/O-বাউন্ড অপারেশনের জন্য async/await ব্যবহার করুন (ThreadPool-এ দবাব কমায়)।
  • ThreadPool টিউনিং সাধারণত দরকার নয় (অটো-স্কেলিং)।
  1. অ্যান্ড্রয়েডে thread.getName() এবং thread.setName() ব্যবহার করার পদ্ধতি

  2. ইম্প্লিসিট থ্রেডিং ও ল্যাঙ্গুয়েজ-ভিত্তিক থ্রেড: OpenMP, GCD, Java, Python, Go, Rust

  3. থ্রেড সিনক্রোনাইজেশন ব্যবহার করে ক্রমাগত সংখ্যা প্রিন্ট করা

  4. লিনাক্সে জম্বি ও অর্ফান প্রসেস