THotPDF.RenderLoadedPagesParallelOrdered Method
Kompiluje a vykresluje načtené stránky souběžně, přičemž dokončené bitmapy doručuje v pořadí vstupu přes ohraničený callback na volajícím vlákně
Deklarace
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 a vlastnictví
Callback běží serializovaně na volajícím vlákně a dostane pozici ve vstupu (číslovanou od nuly), požadovaný index stránky, vypůjčenou bitmapu a příznak zrušení
Bitmapa je platná jen po dobu callbacku a hned po jeho návratu se uvolní, takže pokud má výsledek toto vyvolání přežít, zkopírujte nebo zakódujte ji uvnitř callbacku
Nastavením Cancel zastavíte přebírání nových stránek, probudíte blokované workery, připojíte běžící práci, uvolníte nepublikované výsledky a získáte počet dokončených callbacků
Zrušení v callbacku také probudí workery čekající na rezervaci paměti, aniž by se z toho interního probuzení stala chyba; externí cancellation token nebo výjimka v callbacku hlásí selhání až po úklidu
Backpressure
OutputQueueDepth omezuje dokončené bitmapy včetně bitmapy aktivní v callbacku; hodnoty pod jedničkou vyberou efektivní počet workerů a hodnoty nad počet stránek se přichytí na tento počet
Scheduler si rezervuje výstupní kapacitu pro další požadovanou vstupní pozici, takže pozdější stránky nemohou frontu zaplnit a zablokovat seřazený postup, když se dřívější stránka kompiluje pomaleji
Se zapnutým PeakMemorySchedulerEnabled se požadovaná paralelnost sníží podle největšího odhadu stránky a aktuálně dostupného globálního budgetu a každá rezervace stránky zůstává aktivní od převzetí práce až do opuštění vypůjčené bitmapy v callbacku
Rezervace paměti se vyžadují v pořadí vstupu dřív, než začne paralelní kompilace a vykreslování, takže pozdější stránky nemohou sebrat budget, který potřebuje další callback
Fronta výstupu tedy soutěží o stejný process-wide budget spravedlivě s aktivní kompilací i playbackem, přičemž zrušení či selhání uvolní nepublikované rezervace dřív, než se workery připojí
Callback nesmí dokument měnit ani ničit, dokud jsou workery aktivní
THPDFParallelRenderPipelineInfo · Display Lists and Print Production