เมธอด THotPDF.RenderLoadedPagesParallelOrdered
คอมไพล์และเรนเดอร์หน้าที่โหลดแล้วพร้อมกัน ขณะที่ส่ง bitmap ที่เสร็จแล้วออกตามลำดับ input ผ่าน callback บน thread ผู้เรียกแบบมีขอบเขต
การประกาศ
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 และความเป็นเจ้าของ
Callback ทำงานแบบอนุกรมบน thread ของผู้เรียก พร้อมตำแหน่ง input แบบฐานศูนย์ ดัชนีหน้าที่ขอ bitmap แบบยืมใช้ และ flag สำหรับ cancel
bitmap ใช้ได้เฉพาะช่วงที่ callback ทำงานและถูกคืนทันทีหลัง callback จบ ดังนั้นถ้าผลต้องใช้ต่อหลังการเรียกครั้งนั้นจบไป ให้ copy หรือ encode ภายใน callback
ตั้งค่า Cancel เพื่อหยุดอ้างสิทธิ์หน้าใหม่ ปลุก worker ที่รออยู่ รอ join งานที่ค้าง ปล่อยผลที่ยังไม่ได้เผยแพร่ และคืนจำนวน callback ที่ทำเสร็จ
การยกเลิกผ่าน callback ยังปลุก worker ที่กำลังรอ memory reservation ด้วย โดยไม่แปลงการปลุกภายในนี้เป็น error แต่ cancellation token จากภายนอกหรือ exception ใน callback ยังคงรายงานความล้มเหลวหลังเก็บกวาดเสร็จ
backpressure
OutputQueueDepth จำกัด bitmap ที่เสร็จแล้ว รวมถึง bitmap ที่กำลัง active ใน callback ค่าที่น้อยกว่า 1 จะเลือกจำนวน worker ที่ใช้จริง และค่าที่มากกว่าจำนวนหน้าจะถูก clamp
scheduler จองความจุ output ไว้สำหรับตำแหน่ง input ถัดไปที่ต้องการ ดังนั้นหน้าที่มาทีหลังจะทำ queue เต็มแล้วบล็อกความคืบหน้าแบบเรียงลำดับไม่ได้ เมื่อหน้าก่อนหน้าคอมไพล์ช้ากว่า
เมื่อเปิด PeakMemorySchedulerEnabled ระดับ parallelism ที่ขอจะถูกลดตามประมาณการหน้าที่ใหญ่ที่สุดและงบประมาณรวมที่ว่างอยู่ และการจองของทุกหน้าจะยังคง active ตั้งแต่อ้างสิทธิ์งานจน bitmap แบบยืมใช้ออกจาก callback
memory reservation ถูกขอตามลำดับ input ก่อนการคอมไพล์และการ render แบบขนาน หน้าที่มาทีหลังจึงแย่งงบประมาณที่ callback ถัดไปต้องใช้ไม่ได้
output ใน queue จึงแย่งงบประมาณระดับ process เดียวกันกับการคอมไพล์และ playback ที่กำลังทำงานอย่างเป็นธรรม ขณะที่การ cancel หรือความล้มเหลวจะปล่อยการจองที่ยังไม่ได้เผยแพร่ก่อน join worker
ห้าม callback แก้ไขหรือทำลายเอกสารขณะที่ worker ยัง active อยู่
THPDFParallelRenderPipelineInfo · Display Lists and Print Production