মাল্টিথ্রেডিং-এ রিসোর্স সিঙ্ক্রোনাইজেশন এবং থ্রেড ম্যানেজমেন্টের জন্য 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টিউনিং সাধারণত দরকার নয় (অটো-স্কেলিং)।