THotPDF.RenderLoadedPagesParallelOrdered Method
Kompajlira i renderuje učitane stranice konkurentno, a završene bitmape isporučuje u redosledu ulaza kroz ograničeni callback na pozivajućoj niti
Deklaracija
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 i vlasništvo
Callback se izvršava serijski na pozivajućoj niti sa pozicijom u ulazu od nule, traženim indeksom stranice, pozajmljenom bitmapom i zastavicom za otkazivanje
Bitmapa je važeća samo za trajanje callback-a i oslobađa se odmah nakon što se on vrati, pa je kopiraj ili enkoduj unutar callback-a ako rezultat mora da nadživi taj poziv
Postavi Cancel da bi se prekinulo preuzimanje novih stranica, probudili blokirani worker-i, sačekali poslovi u toku, oslobodili neobjavljeni rezultati i vratio broj završenih callback poziva
Otkazivanje callback-a takođe budi worker-e koji čekaju memorijsku rezervaciju, a da se to interno buđenje ne prijavi kao greška; eksterni cancellation token ili izuzetak u callback-u i dalje prijavljuje neuspeh nakon čišćenja
Backpressure
OutputQueueDepth ograničava broj završenih bitmapa, uključujući i bitmapu aktivnu u callback-u; vrednosti ispod jedan biraju efektivan broj worker-a, a vrednosti iznad broja stranica se skraćuju
Scheduler rezerviše izlazni kapacitet za sledeću potrebnu poziciju u ulazu, pa kasnije stranice ne mogu da napune red i blokiraju uređeni napredak dok se neka ranija stranica kompajlira sporije
Sa PeakMemorySchedulerEnabled, traženi paralelizam se smanjuje prema najvećoj proceni stranice i trenutno dostupnom globalnom budžetu, a svaka rezervacija stranice ostaje aktivna od preuzimanja posla dok se njena pozajmljena bitmapa ne izvuče iz callback-a
Memorijske rezervacije se traže po redosledu ulaza pre paralelne kompilacije i renderovanja, pa kasnije stranice ne mogu da uzmu budžet koji treba sledećem callback-u
Isporučeni izlaz se zato pošteno takmiči sa aktivnom kompilacijom i reprodukcijom za isti budžet celog procesa, dok otkazivanje ili neuspeh oslobađa neobjavljene rezervacije pre nego što se worker-i pridruže
Callback ne sme da menja niti uništava dokument dok su worker-i aktivni
THPDFParallelRenderPipelineInfo · Liste prikaza i produkcija štampe