مرجع HotPDF

يجمّع ويعرض الصفحات المحمّلة بشكل متزامن مع تسليم bitmaps المكتملة بترتيب الإدخال عبر callback محدود يعمل على خيط الاستدعاء

التصريح

function RenderLoadedPagesParallelOrdered(
    const PageIndices: array of Integer; DPI, MaxConcurrency,
    OutputQueueDepth: Integer; Callback: THPDFParallelRenderPageEvent): Integer; overload;

function RenderLoadedPagesParallelOrdered(
    const PageIndices: array of Integer; DPI, MaxConcurrency,
    OutputQueueDepth: Integer; Callback: THPDFParallelRenderPageEvent;
    out Info: THPDFParallelRenderPipelineInfo): Integer; overload;

الـCallback والملكية

يعمل Callback بشكل تسلسلي على خيط الاستدعاء، مزوَّدًا بموضع الإدخال (يبدأ من الصفر)، وفهرس الصفحة المطلوبة، وbitmap مُستعار، وعلم إلغاء

الصورة النقطية صالحة فقط طوال مدة الـcallback وتُحرَّر فور عودته، لذا انسخها أو رمِّزها داخل الـcallback عندما يجب أن تبقى النتيجة بعد انتهاء هذا الاستدعاء

اضبط Cancel لإيقاف المطالبة بصفحات جديدة، وإيقاظ العمال المحظورين، وضم العمل قيد التنفيذ، وتحرير النتائج غير المنشورة، وإرجاع عدد استدعاءات callback المكتملة

إلغاء الـcallback يوقظ أيضًا العمال المنتظرين حجز ذاكرة دون تحويل ذلك الإيقاظ الداخلي إلى خطأ؛ بينما يظل رمز إلغاء خارجي أو استثناء داخل الـcallback يُبلِّغ عن فشل بعد الانتهاء من التنظيف

ضغط العودة (Backpressure)

يحدد OutputQueueDepth عدد الـ bitmaps المكتملة بما فيها الـ bitmap النشط داخل الـ callback؛ القيم الأقل من واحد تختار عدد العمال الفعلي، والقيم الأعلى من عدد الصفحات تُقيَّد

يحجز المُجدول سعة إخراج لموضع الإدخال التالي المطلوب، فلا تستطيع الصفحات اللاحقة ملء الطابور وإعاقة التقدم المرتَّب عندما تأخذ صفحة أسبق وقتًا أطول في التجميع

مع تفعيل PeakMemorySchedulerEnabled، يُخفَّض التوازي المطلوب من أكبر تقدير لحجم صفحة والميزانية العالمية المتاحة حاليًا، ويبقى حجز كل صفحة نشطًا من لحظة المطالبة بالعمل حتى يغادر bitmap المُستعار الخاص بها الـ callback

تُطلب حجوزات الذاكرة بترتيب الإدخال قبل التجميع والعرض المتوازيين، فلا تستطيع الصفحات اللاحقة الاستحواذ على الميزانية التي يحتاجها الـ callback التالي

يتنافس الإخراج المُصفَّف بإذن ذلك بإنصاف مع التجميع النشط والتشغيل على نفس الميزانية الشاملة للعملية، بينما يحرر الإلغاء أو الفشل الحجوزات غير المنشورة قبل ضم العمال

يجب ألا يُعدّل الـcallback المستند أو يدمره ما دام العمال نشطين

THPDFParallelRenderPipelineInfo · Display Lists and Print Production