LINQ (Language Integrated Query) একটি শক্তিশালী ডেটা ফিল্টারিং এবং প্রসেসিং টুল, তবে কিছু ক্ষেত্রে ডেটার পরিমাণ খুব বড় হতে পারে, যার ফলে কুয়েরি প্রক্রিয়াকরণ সময়সাপেক্ষ হয়ে ওঠে। Parallel Query Execution হল LINQ এর একটি বৈশিষ্ট্য, যা System.Linq লাইব্রেরির মাধ্যমে ডেটা প্রসেসিংকে দ্রুত করতে সাহায্য করে, বিশেষ করে যখন আপনি বড় আকারের ডেটা সেটের উপর কাজ করছেন। এটি parallel programming এর ধারণা ব্যবহার করে, যার মাধ্যমে আপনি একই কাজকে একাধিক থ্রেডে ভাগ করে দ্রুত ফলাফল পেতে পারেন।
Parallel LINQ (PLINQ) LINQ এর একটি এক্সটেনশন যা মাল্টিপল থ্রেড ব্যবহার করে LINQ কুয়েরি এর কার্যকারিতা বৃদ্ধি করে। PLINQ, সাধারণ LINQ কুয়েরির মতোই ব্যবহার করা যায়, তবে এটি ডেটা প্রসেসিংয়ের জন্য প্যারালাল থ্রেড ব্যবহার করে, যা কাজের গতি অনেক বাড়িয়ে দেয়।
PLINQ ব্যবহারের মাধ্যমে, LINQ কুয়েরি গুলো প্যারালালভাবে System.Threading.Tasks নামক থ্রেডিং পদ্ধতি ব্যবহার করে একাধিক প্রসেসে ভাগ হয়ে একযোগে কার্যকর হয়।
PLINQ ব্যবহার করতে হলে আপনাকে AsParallel() মেথড ব্যবহার করতে হবে, যা LINQ কুয়েরির ডেটাকে প্যারালাল প্রসেসিংয়ের জন্য প্রস্তুত করে।
var numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var query = numbers.AsParallel()
.Where(n => n % 2 == 0)
.Select(n => n * 2);
foreach (var number in query)
{
Console.WriteLine(number);
}
এখানে, AsParallel() মেথড দিয়ে LINQ কুয়েরি প্যারালাল ভাবে চালানো হয়েছে। এর ফলে, সংখ্যাগুলোর ফিল্টারিং এবং ট্রান্সফর্মেশন কাজটি একাধিক থ্রেডে ভাগ হয়ে দ্রুত সম্পন্ন হবে।
var orderedQuery = numbers.AsParallel()
.AsOrdered()
.Where(n => n % 2 == 0)
.Select(n => n * 2);
var query = numbers.AsParallel()
.WithDegreeOfParallelism(4)
.Where(n => n % 2 == 0);
এখানে, কুয়েরি শুধুমাত্র ৪টি থ্রেডে কাজ করবে।
CancellationTokenSource cts = new CancellationTokenSource();
var query = numbers.AsParallel()
.WithCancellation(cts.Token)
.Where(n => n % 2 == 0);
PLINQ তে এক্সসেপশন হ্যান্ডলিং সাধারণ LINQ এর মতোই করা যায়, তবে এক্ষেত্রে যদি কোনো এক্সসেপশন ঘটে, তবে তা AggregateException আকারে ধরা পড়ে, যা multiple exceptions ধারণ করতে সক্ষম। এক্সসেপশন হ্যান্ডল করার উদাহরণ:
try
{
var query = numbers.AsParallel()
.Where(n => n < 0) // Invalid logic causing an exception
.Select(n => 10 / n);
foreach (var number in query)
{
Console.WriteLine(number);
}
}
catch (AggregateException ex)
{
foreach (var innerException in ex.InnerExceptions)
{
Console.WriteLine(innerException.Message);
}
}
Parallel LINQ (PLINQ) LINQ কুয়েরিগুলিকে মাল্টি-থ্রেডেড পদ্ধতিতে কার্যকরী করার জন্য একটি শক্তিশালী টুল। এটি ডেটা প্রসেসিংয়ের গতি বৃদ্ধি করে, বিশেষত বড় ডেটা সেটের ক্ষেত্রে। তবে, ছোট ডেটা সেটে এর ব্যবহার থেকে কিছু পারফরম্যান্সের হানি হতে পারে, এবং এতে কিছু সীমাবদ্ধতাও আছে যেমন থ্রেড ম্যানেজমেন্ট এবং থ্রেড সেফটি। PLINQ-এ এক্সসেপশন হ্যান্ডলিং এবং ডিবাগিং টেকনিকস ব্যবহারের মাধ্যমে আপনি কার্যকরী এবং স্থিতিশীল কোড তৈরি করতে পারেন।
common.read_more