lfu 알고리즘 예제

LFU(자주 사용되지 않는 경우)는 컴퓨터 내의 메모리를 관리하는 데 사용되는 캐시 알고리즘의 유형입니다. 이 메서드의 표준 특성에는 블록이 메모리에서 참조되는 횟수를 추적하는 시스템이 포함됩니다. 캐시가 가득 차고 더 많은 공간이 필요한 경우 시스템은 가장 낮은 참조 빈도로 항목을 제거합니다. 설정(4,4)이 되면 LFU 알고리즘이 제거됩니다(3,3), LRU는 제거됩니다(1,1). 최소 힙 데이터 구조는 로그 시간 복잡성에서 삽입, 삭제 및 업데이트를 처리하므로 이 알고리즘을 구현하는 데 적합합니다. 가장 최근에 사용한 캐시 블록을 제거하여 넥타이를 해결할 수 있습니다. 다음 두 컨테이너는 문제를 해결하는 데 사용되었습니다: LFU 알고리즘을 사용하는 가장 간단한 방법은 캐시에 로드되는 모든 블록에 카운터를 할당하는 것입니다. 해당 블록에 대한 참조가 만들어날 때마다 카운터가 하나씩 증가합니다. 캐시가 용량에 도달하고 삽입되기를 기다리는 새 블록이 있으면 시스템은 가장 낮은 카운터가 있는 블록을 검색하고 캐시에서 제거합니다.

[2] 최근에 사용한 항목이 가장 먼저 버려지다. 이 알고리즘은 알고리즘이 항상 가장 최근에 사용한 항목을 삭제하는지 확인하려는 경우 비용이 많이 드는 때 사용 된 내용을 추적해야합니다. 이 기법의 일반적인 구현에서는 캐시 라인에 대해 “연령 비트”를 유지하고 연령 비트를 기반으로 “가장 최근에 사용한” 캐시 라인을 추적해야 합니다. 이러한 구현에서 캐시 줄을 사용할 때마다 다른 모든 캐시 줄의 사용 시간이 변경됩니다. 예를 들어 캐시 크기가 3인 경우 데이터 액세스 시퀀스를 다음과 같이 LFU는 최근에 사용한 알고리즘과 결합되어 LRFU라고 합니다. [1] 가장 자주 사용되지 않는 LFU(LFU)는 캐시가 오버플로될 때마다 가장 자주 사용되지 않는 캐시 블록이 제거되는 캐싱 알고리즘입니다. LFU에서 우리는 이전 페이지뿐만 아니라 해당 페이지의 빈도를 확인하고 페이지의 빈도가 이전 페이지보다 큰 경우 우리는 그것을 제거 할 수 없습니다 모든 이전 페이지가 동일한 주파수를 가지고있는 경우 다음 마지막 i.e FIFO 방법을 가지고 그 페이지를 제거합니다. 골랑 구현 : github.com/golang/groupcache/blob/master/lru/lru.go . . .

LFU 메서드는 메모리 관리에 대한 직관적인 접근 방식처럼 보일 수 있지만 오류가 없는 것은 아닙니다. 메모리에 있는 항목을 짧은 시간 동안 반복적으로 참조하고 오랜 시간 동안 다시 액세스하지 않는 항목을 고려합니다. 카운터에 얼마나 빨리 접근했는지 로 인해 상당한 시간 동안 다시 사용되지 않더라도 카운터가 급격히 증가했습니다. 이렇게 하면 실제로 다른 방법을 통해 액세스했기 때문에 제거에 더 자주 사용할 수 있는 다른 블록이 남습니다. [3] 또한 캐시에 방금 입력한 새 항목은 낮은 카운터로 시작하기 때문에 매우 자주 사용되기 때문에 곧 다시 제거될 수 있습니다.

Posted in Uncategorized