Sharded Loaded-Image Decode Cache

HotPDF combines independently locked cache metadata with exact per-key singleflight coordination

Parallel work

Sixteen metadata shards limit contention during lookup, admission, and eviction while expensive image decoding runs outside cache locks

درخواست‌هایی با کلیدهای متفاوت می‌توانند همزمان decode شوند و درخواست‌هایی با یک کلید یکسان یک owner را انتخاب می‌کنند که نتیجهٔ کامل‌شدهٔ آن با همهٔ فراخواننده‌های منتظر به اشتراک گذاشته می‌شود

Global bounds

ImageCacheMaxBytes، بیشترین تعداد ورودی و بیشترین اندازهٔ هر ورودی روی مجموع محتوای همهٔ shardها اعمال می‌شود

trim بین shardها سقف‌های پیکربندی‌شده را دقیقاً حفظ می‌کند و تا وقتی shard دیگری بتواند درخواست eviction را برآورده کند، shardی را که همین الان در آن درج شده انتخاب نمی‌کند

Ownership and lifetime

AcquireLoadedImageStream and AcquireLoadedImageRegionAtResolution return immutable reference-counted handles, so warm hits and singleflight waiters share decoded storage without copying pixels

handle پس از eviction در cache، باطل شدن و تخریب سند معتبر می‌ماند، در حالی که CreateBitmapCopy وقتی پیکسل‌های قابل‌تغییر لازم باشند یک bitmap ایزولهٔ متعلق به فراخواننده می‌دهد

متدهای legacy مربوط به decode با cache قرارداد TBitmap متعلق به فراخواننده را با materialise کردن یک نسخه از handle حفظ می‌کنند

Telemetry

GetImageDecodeConcurrencyInfo exposes live and cumulative concurrency counters

شمارنده‌ها علاوه بر فعالیت owner موازی و singleflight، شمار دریافت handle، کپی‌های bitmap برای سازگاری و بایت‌های کپی‌شده را هم نشان می‌دهند

APIهای مرتبط

IHPDFDecodedBitmapHandle · AcquireLoadedImageStream · AcquireLoadedImageRegionAtResolution · THPDFImageDecodeConcurrencyInfo