캐시란?
- 캐시는 임시로 쓰이는 버퍼(buffer) 메모리이다.
캐시를 왜 쓰는데?
캐시를 사용하면, 빈번하게 쓰이는 데이터들을 메모리보다 빠르게 가져올 수 있다. 그것을 가능하게하는 것이 캐시이다.
캐시는 대부분 프로세서의 내부에 존재하고, 데이터를 찾으려고할 때 캐시에 해당 주소의 데이터가 있다면 캐시에서 꺼내쓰는 방식이다.
캐시에 저장되는 방식으로는 write-back 과 write-through 이렇게 두 가지로 나뉜다.
- Write-Back
- 캐시에 데이터를 썼다가 나중에 실제 메모리에 업데이트하는 방식
- Write-Through
- 캐시와 메모리 둘 다 한꺼번에 쓰는 방식
그렇다면, 캐시를 거쳐가야하니까 분명히 오히려 도움이 안되는 경우도 있지 않을 까?
음... 근데 Cache Miss일 확률은 매우 적다고 한다. (Cache Hit = 캐시에서 데이터를 찾은 경우, Cache Miss = 캐시에 없는 경우)
그것에는 프로그램의 여러가지 특성때문인데, 그 중에서 몇 개만 살펴보자.
- Temporal Locality
시간적인 국소성이다. 프로그램 코드의 특성상, 한 번 읽었던 데이터는 나중에 참조할 확률이 높고, 이렇게 자주 쓰이는 데이터는 캐시에 넣어두면 성능이 배가 될 수 있다. 예를 들어, for문이나 while과 같은 반복코드에서는 특히나 캐시사용으로 인한 효과가 두드러질 수 있다.
- Spatial Locality
위에가 시간적이라면 이번에는 공간적인 국소성이다. 사용한 데이터와 인접한 데이터 역시도 참조할 확률이 높다는 것이다. 이 부분은 실제 캐시의 자세한 구조와 방식을 참고해보아야 한다. 근데 넘나 복잡하고 읽기 싫어서 일단 스킵한다.
그냥 하루에 하나씩 아주 얕게라도 개발지식에 대해 써보기로 마음 먹었다. 며칠가나보자.
'Learn' 카테고리의 다른 글
CSR, SSR, SSG 간단하게라도 알고가자 (0) | 2023.02.19 |
---|---|
스파르타 웹개발종합반 (화성에서 땅 사기) (0) | 2022.09.29 |
스파르타 웹개발종합반 5주차 (0) | 2022.09.29 |
스파르타 웹개발종합반 4주차 (0) | 2022.09.29 |
스파르타 웹개발종합반 3주차 (0) | 2022.09.29 |