반응형
캐시 특강
캐시에 대하여
CPU?
메모리에서 연산자와 피연산자의 정보를 가져온다.
흠... 이거보다 더 빠른 방법이 없을까?
메모리에 물어보기 전에 캐시한테 물어봐서, 캐시가 갖고 있으면 캐시에서 데이터를 갖고 오는 게 빠르다!
이유? 캐시가 더 가까움(100미터 떨어진 자판기<->1km 떨어진 편의점)
- 특정 음료가 자판기에 있으면 cache hit : 편의점에 안 가도 됨
- 특정 음료가 자판기에 없으면 cache miss : 편의점에 가야 함~
그럼, 편의점보다 가까운 자판기에 인기가 있을만한 음료수를 배치하면 굳이 편의점에 안 가고 여기서 계속 이용하겠지?
캐시가 인기 있을만한 정보를 미리 들고 있으면 CPU가 캐시에게 물어본다.
내가 지금 메모리 OO에 위치한 변수의 값을 좀 가져와야겠는데 혹시 그거 아니?
만약 OO의 값이 있으면 캐시가 알려주고, 없으면... 메모리에게 가보라고 알려줌!
캐시의 역할 정리
CPU와 메모리 간 데이터 전송 레이턴시 개선을 위해 사용되는 전략
레이턴시(Latency)는 컴퓨터 과학과 네트워킹에서 중요한 개념으로, 어떤 작업이 시작되고 완료되기까지의 시간 지연을 의미한다. 특히, CPU와 메모리 간 데이터 전송에 있어서의 레이턴시는 CPU가 메모리에 접근하여 데이터를 읽거나 쓰기 시작한 시점부터, 해당 작업이 완료되고 CPU가 그 데이터를 실제로 사용할 수 있게 될 때까지 걸리는 시간을 말함!
그럼, 어떻게 인기가 있는 음료수를 판별할까?
캐싱 알고리즘이란?
지역성(Locality)
- 최근에 어떤 음료수가 많이 나갔나? 이걸 다시 찾을 확률이 높지 않을까?
- 최근에 어떤 데이터를 많이 썼지? `가까운 미래에 재사용`할 가능성이 있다고 믿기
- 시간적 지역성
- 이 음료수를 좋아하는 사람은 비슷한 다른 음료수도 좋아할 확률이 높지 않을까?
- 지금 어떤 데이터를 사용했다면 그와 `인접한 데이터`도 사용할 가능성이 있다고 믿기
- 공간적 지역성
const arr = []; //배열 사용
...
const result = [];
const loopCount = 10; //arr.length는 loopCount보다 작다고 가정함
for (let i = 0; i<loopCount; i+=1) {
result.push(arr[i] + arr[i+1]);
}
이 코드는 arr 배열에서 인접한 원소들을 더하는 간단한 연산을 수행한다. arr 배열의 각 원소에 대해, 현재 원소(arr[i])와 다음 원소(arr[i+1])를 더한 결과를 result 배열에 저장함
시간적 지역성(Temporal Locality)
시간적 지역성은 최근에 접근한 데이터에 대해 곧 다시 접근할 가능성이 높다는 개념
- 코드에서 arr[i]와 arr[i+1]를 더하는 연산을 보면, 첫 번째 반복에서 arr[i]는 오른쪽 피연산자로 사용된다.
- 그리고 바로 다음 반복에서는 arr[i+1]이 되어 왼쪽 피연산자로 사용된다.
- 즉, arr[i]에 최근 접근했다면, 바로 다음 반복에서 arr[i+1] (이전에 arr[i]였던 값)에 다시 접근하게 된다는 것
- 이는 시간적 지역성의 예시로, 데이터가 한 번 사용되면 곧바로 다시 사용될 가능성이 높음을 보여줌
공간적 지역성(Spatial Locality)
arr이라는 배열 내의 메모리들이 순차적으로 사용됨
공간적 지역성은 메모리 상에서 서로 가까이 위치한 데이터에 대해 순차적으로 접근할 가능성이 높다는 개념
- 코드 예제에서 arr[i]와 arr[i+1]는 메모리 상에서 인접해 있으며, 반복문이 순차적으로 실행됨에 따라 이 인접한 원소들이 차례대로 사용된다...
- 즉, 어떤 데이터를 사용했다면, 그 데이터와 메모리 상에서 가까이 있는 다른 데이터도 곧 사용될 가능성이 높다는 것
반응형
'TIL' 카테고리의 다른 글
lodash 라이브러리 함수 정리 (0) | 2024.03.08 |
---|---|
JavaScript 기본 문법 : find() (0) | 2024.03.08 |
TypeScript에 대하여 (0) | 2024.03.05 |
Redis에 대해서 (1) | 2024.02.29 |
의존성 주입에 대하여 (0) | 2024.02.27 |