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