THotPDF.RenderLoadedPagesParallelOrdered Method

Compila e renderiza páginas carregadas em simultâneo, entregando os bitmaps concluídos pela ordem de entrada através de um callback limitado na thread chamadora

Declaração

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 é executado em série na thread chamadora com a posição de entrada com base zero, o índice de página pedido, o bitmap emprestado e o flag de cancelamento

O bitmap só é válido durante o callback e é libertado imediatamente depois de o callback devolver, pelo que deve copiá-lo ou codificá-lo dentro do callback quando o resultado tiver de sobreviver a essa invocação

Defina Cancel para deixar de reclamar páginas novas, acordar os workers bloqueados, fazer join do trabalho em curso, libertar os resultados não publicados e devolver o número de callbacks concluídos

O cancelamento pelo callback também acorda os workers à espera de uma reserva de memória sem transformar esse despertar interno num erro; um token de cancelamento externo ou uma exceção no callback continua a reportar falha após a limpeza

Backpressure

OutputQueueDepth limita os bitmaps concluídos, incluindo o bitmap ativo no callback; valores abaixo de um selecionam o número efetivo de workers e valores acima do número de páginas são limitados a este

O scheduler reserva capacidade de saída para a posição de entrada seguinte necessária, pelo que páginas posteriores não podem encher a fila e bloquear o avanço ordenado quando uma página anterior demora mais a compilar

Com PeakMemorySchedulerEnabled, o paralelismo pedido é reduzido a partir da maior estimativa de página e do orçamento global atualmente disponível, e cada reserva de página permanece ativa desde a reclamação do trabalho até o bitmap emprestado sair do callback

As reservas de memória são pedidas pela ordem de entrada antes da compilação e renderização paralelas, pelo que páginas posteriores não podem consumir o orçamento de que o callback seguinte precisa

A saída em fila compete, assim, de forma equitativa com a compilação e a reprodução ativas pelo mesmo orçamento ao nível do processo, enquanto o cancelamento ou uma falha libertam as reservas não publicadas antes do join dos workers

O callback não pode modificar nem destruir o documento enquanto os workers estiverem ativos

THPDFParallelRenderPipelineInfo · Listas de apresentação e produção de impressão