THotPDF.RenderLoadedPagesParallelOrdered Method

صفحه‌های بارگذاری‌شده را هم‌زمان کامپایل و رندر می‌کند و bitmapهای تکمیل‌شده را به ترتیب ورودی، از طریق یک callback محدود روی thread فراخواننده تحویل می‌دهد

اعلان

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 and ownership

Callback به‌صورت ترتیبی روی thread فراخواننده اجرا می‌شود و موقعیت صفرمبنای ورودی، اندیس صفحهٔ درخواستی، bitmap امانی و پرچم لغو را دریافت می‌کند

bitmap فقط در مدت اجرای callback معتبر است و بلافاصله پس از بازگشت callback آزاد می‌شود، بنابراین اگر نتیجه باید بیش از آن فراخوانی عمر کند، آن را داخل callback کپی یا encode کنید

برای متوقف کردن claim صفحه‌های جدید، بیدار کردن workerهای بلوکه‌شده، join کردن کارهای در حال اجرا، آزاد کردن نتایج منتشرنشده و برگرداندن تعداد callbackهای تکمیل‌شده، Cancel را تنظیم کنید

لغو از طریق callback همچنین workerهایی را که منتظر یک رزرو حافظه‌اند بیدار می‌کند بدون آنکه آن بیدارسازی داخلی به خطا تبدیل شود؛ توکن لغو بیرونی یا استثنای callback همچنان پس از پاک‌سازی شکست را گزارش می‌کند

Backpressure

OutputQueueDepth تعداد bitmapهای تکمیل‌شده را، از جمله bitmap فعال در callback، محدود می‌کند؛ مقدارهای کمتر از یک، تعداد worker مؤثر را انتخاب می‌کنند و مقدارهای بیشتر از تعداد صفحه‌ها به آن محدود می‌شوند

scheduler ظرفیت خروجی را برای موقعیت ورودی بعدیِ موردنیاز رزرو می‌کند، بنابراین صفحه‌های بعدی نمی‌توانند صف را پر کنند و وقتی صفحهٔ قبلی کندتر کامپایل می‌شود، پیشرفت ترتیبی را بلوکه کنند

با PeakMemorySchedulerEnabled، موازی‌سازی درخواستی با توجه به بزرگ‌ترین تخمین صفحه و بودجهٔ سراسری در دسترس فعلی کم می‌شود و رزرو هر صفحه از لحظهٔ claim کار تا خروج bitmap امانی از callback فعال می‌ماند

رزروهای حافظه پیش از کامپایل و رندر موازی و به ترتیب ورودی درخواست می‌شوند، پس صفحه‌های بعدی نمی‌توانند بودجهٔ موردنیاز callback بعدی را تصاحب کنند

بنابراین خروجی در صف با کامپایل و پخش فعال بر سر همان بودجهٔ سراسری فرآیند منصفانه رقابت می‌کند، و لغو یا شکست پیش از join کردن workerها رزروهای منتشرنشده را آزاد می‌کند

تا وقتی workerها فعال‌اند، callback نباید سند را تغییر دهد یا از بین ببرد

THPDFParallelRenderPipelineInfo · Display Lists and Print Production