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