THotPDF.RenderLoadedPagesParallelOrdered Method

Kompiluje i renderuje wczytane strony współbieżnie, dostarczając ukończone bitmapy w kolejności wejściowej przez ograniczony callback na wątku wywołującym

Deklaracja

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 własność

Callback działa szeregowo na wątku wywołującym i otrzymuje pozycję wejściową liczona od zera, żądany indeks strony, pożyczoną bitmapę oraz flagę anulowania

Bitmapa jest ważna tylko przez czas trwania callbacku i jest zwalniana bezpośrednio po jego powrocie, więc jeśli wynik ma przetrwać to wywołanie, skopiuj albo zakoduj go wewnątrz callbacku

Ustaw Cancel, żeby przestać przyznawać nowe strony, obudzić zablokowane workery, dołączyć pracę w toku, zwolnić nieopublikowane wyniki i zwrócić liczbę ukończonych wywołań callbacku

Anulowanie callbacku budzi też workery czekające na rezerwację pamięci, nie zamieniając tego wewnętrznego wybudzenia w błąd; zewnętrzny token anulowania albo wyjątek callbacku nadal raportuje porażkę po posprzątaniu

Backpressure

OutputQueueDepth ogranicza liczbę ukończonych bitmap, łącznie z bitmapą aktywną w callbacku; wartości poniżej jedyny wybierają efektywną liczbę workerów, a wartości powyżej liczby stron są przycinane

Scheduler rezerwuje miejsce wyjściowe dla następnej wymaganej pozycji wejściowej, więc późniejsze strony nie mogą zapełnić kolejki i zablokować uporządkowanego postępu, gdy wcześniejsza strona kompiluje się wolniej

Przy włączonym PeakMemorySchedulerEnabled żądana równoległość jest redukowana na podstawie największego szacunku strony i aktualnie dostępnego globalnego budżetu, a rezerwacja każdej strony pozostaje aktywna od przyznania pracy do momentu, gdy jej pożyczona bitmapa opuści callback

Rezerwacje pamięci są żądane w kolejności wejścia przed równoległą kompilacją i renderowaniem, więc późniejsze strony nie mogą zabrać budżetu potrzebnego następnemu callbackowi

Skolejkowane wyjście konkuruje więc sprawiedliwie o ten sam budżet całego procesu z aktywną kompilacją i odtwarzaniem, a anulowanie albo błąd zwalnia nieopublikowane rezerwacje przed dołączeniem workerów

Callback nie może modyfikować ani niszczyć dokumentu, dopóki workery są aktywne

THPDFParallelRenderPipelineInfo · Listy wyświetlania i produkcja poligraficzna