샤딩된 로드 이미지 디코드 캐시
HotPDF는 독립적으로 잠긴 캐시 메타데이터를 키별 정확한 singleflight 조정과 결합합니다
병렬 작업
16개 메타데이터 샤드는 조회, 승인 및 축출 중 경합을 제한하며, 비용이 큰 이미지 디코딩은 캐시 잠금 밖에서 실행됩니다
서로 다른 키에 대한 요청은 동시에 디코딩될 수 있고, 같은 키에 대한 요청은 완료된 결과를 모든 대기 호출자와 공유하는 소유자 하나를 선출합니다
전역 경계
ImageCacheMaxBytes, 최대 항목 수 및 항목당 최대 크기는 모든 샤드의 결합 콘텐츠에 적용됩니다
샤드 간 정리는 정확한 구성된 제한을 유지하고, 다른 샤드가 축출 요청을 충족할 수 있을 때 방금 삽입된 샤드를 선택하는 것을 피합니다
소유권 및 수명
AcquireLoadedImageStream 및 AcquireLoadedImageRegionAtResolution은 변경 불가능한 참조 계수 핸들을 반환하므로, 웜 적중과 singleflight 대기자가 픽셀을 복사하지 않고 디코딩된 저장소를 공유합니다
핸들은 캐시 축출, 무효화 및 문서 파괴 후에도 유효하며, 변경 가능한 픽셀이 필요할 때 CreateBitmapCopy는 격리된 호출자 소유 비트맵을 제공합니다
레거시 캐시 디코드 메서드는 핸들에서 복사본 하나를 구체화하여 호출자 소유 TBitmap 계약을 유지합니다
원격 측정
GetImageDecodeConcurrencyInfo는 라이브 및 누적 동시성 카운터를 노출합니다
카운터는 병렬 소유자 및 singleflight 활동 외에도 핸들 획득, 호환 비트맵 복사 및 복사된 바이트를 노출합니다
관련 API
IHPDFDecodedBitmapHandle · AcquireLoadedImageStream · AcquireLoadedImageRegionAtResolution · THPDFImageDecodeConcurrencyInfo