تاسك باراليل ليبراري
Task Parallel Library
هي (مكتبة) مجموعة من الأنماط العامة و(APIs) أي دوال في : (System.Threading و System.Threading.Tasks) namespaces في (.Net framework version 4.0).
الغرض من (TPL) هو جعل المطورين أكثر قدرة على الإنتاج من خلال تسهيل عملية إضافة العمل التفرعي أي عمل المهام في وقت واحد (concurrency) معاً مع مزامنة هذه العمل لمنع التضارب في برامجهم وتطبيقاتهم.
تقوم (TPL) بتعديل المزامنة (concerruncy) بشكل ديناميكي كي يتمكن التطبيق من استخدام كل المعالجات المتاحة.
إضافةً إلى ذلك تقوم (TPL) بتجزئة العمل وجدولة المهام في ما يسمى (ThreadPool) والعديد من المهام والتفاصيل منخفضة المستوى.
ياستخدام (TPL) يمكننا زيادة أداء البرنامج بشكل كبير مع الحفاظ على تركيزنا على هدف البرنامج الرئيسي، ومن الجدير بالذكر أن (TPL) سهلة وبسيطة.
لو تكلمنا عن (.Net framework 4.0) فإنه يجب القول أن (TPL) هي الطريقة المفضلة لكتابة (Multithreaded and parallel code).
لكن مع ذلك ليس أي (code) مناسب لجعله تفرعياً أي توزيعه على عدة معالجات أو تقسيمه إلى أجزاء، فمثلاً إذا كان لدينا حلقة تنفذ عملاً بسيطاً جداً في كل تكرارٍ لها وفي بعض التكرارات لا تنفذ أي شيء، فإنه من الأفضل عدم تحويل ال (code) الخاص بها إلى (code) تفرعي لأنه سوف يجعل البرنامج بطيئاً أكثر مما كان عليه في حالة(code) مبرمج بطريقة تسلسلية.
إذاً يمكننا القول أن (TPL) كانت عبارة عن إضافة من عدة إضافات تم إضافتها إلى (.Net 4) لدعم البرمجة التفرعية.
فهي تزود (.Net 4) بالعديد من الخيارات (Options) من خلال :
TaskCreationOptions, TaskContinuationOptions and Parallel options classes وهذه الخيارات مرفقة بأمثلة توضح الاستخدام السليم والخاطئ لها.
يتم تطوير (TPL) من قبل (Microsoft Research) وفريق (CLR) في (Microsoft).
ParallelOptions parallelOptions = new ParallelOptions(); 
parallelOptions.MaxDegreeOfParallelism == threadCount; Parallel.For(0, dataBlockCount, parallelOptions, (dataBlockIndex) ==> { // do work });
إن (TPL) هي العنصر الأهم في التوسيعات الخاصة بالعمليات التفرعية لِ (.Net).
إذ أنها كشفت النقاب عن العديد من البنى مثل (parallel For) و(ForEach loops)، وهذه البنى من الممكن أن تستخدم من قبل أي لغة من (.NET framework).
إن عملية إنشاء المهام (Thread spawning) وإنهائها (Thread Terminating) وعمليات (scale) لعدد المهام بحسب عدد المعالجات المتاحة، هي من مهام المكتبة وحدها.
تحوي (TPL) بنىً أخرى مثل (Task) و(Future)، (Task) تعني عملاً يمكن القيام به وتنفيذه بشكل مستقل عن باقي البرنامج، ويمكن القول أن (Task) مكافئة لِ (Thread) تقريباً.
يتم ترتيب المهام بشكل رتل (queue) من قبل غرض من الصف (Task Manager)، إذ يقوم الأخير بجدولة (Tasks) من أجل تشغيلها على (OS Threads) المختلفة في ما يسمى (thread pool).
البنية (Future) تقوم بإعادة نتيجة، هذه النتيجة تحسب باستخدام (thread) مغلفة من قبل الغرض (Future)، وتبقى هذه النتيجة في (buffer) حتى تطلب من قبل (thread) أخرى، ولو أن (thread) ما قامت بطلب الناتج ولم يكن الناتج جاهزاً بعد سوف تتم عملية (block) لل (task) الطالبة ريثما تصبح النتيجة المطلوبة جاهزة.
الشكل التالي يوضح بنية (.NET Parallel extensions) التي طرحتها (Microsoft) والتي هي عبارة عن جزأين :
إن أي برنامج مكتوب بأي لغة من لغات (.NET) يمكنه أن يتعامل مع (TPL) ويستفيد من خدماتها في مجال البرمجة التفرعية.
لقد تم طرح هذه المكتبة ضمن توسيعات (Microsoft) الداعمة للبنى التفرعية والمعالجات والنوى المتعددة، وكان أول إطلاق لها في November 29, 2007 كنسخة (CTP) وتم تجديدها في (December 2007 and June 2008).لدينا حالتان :
إن البرنامج الجاري تنفيذه هو عبارة عن برنامج ضغط ملفات.
إن المحور (Y) هو محور الزمن، والزمن فيه مقدر بِ (ms).
أما المحور (X) فهو يعبر عن حجم الملف المضغوط مقدراً بِ (MB).
و سوف نلاحظ أنه مع استخدام (TPL) سيكون الوقت المستغرق في عملية الضغط أقصر بما يقارب أربع مرات.
علماً أن هذا الفحص أجري على آلة من أربع معالجات (أربع نوى).
يمكنك مشاهدة الاختبار على موقع (The code project).
مواصفات الآلة المستخدمة في هذا الاختبار :