20240306

귤금·2024년 3월 5일

Node.js 4기 TIL

목록 보기
48/86

Today?

챌린지반 특강 - 캐시

캐시에 대해서

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)

시간적 지역성은 최근에 접근한 데이터에 대해 곧 다시 접근할 가능성이 높다는 개념

  1. 코드에서 arr[i]와 arr[i+1]를 더하는 연산을 보면, 첫 번째 반복에서 arr[i]는 오른쪽 피연산자로 사용된다.
  2. 그리고 바로 다음 반복에서는 arr[i+1]이 되어 왼쪽 피연산자로 사용된다.
    • 즉, arr[i]에 최근 접근했다면, 바로 다음 반복에서 arr[i+1] (이전에 arr[i]였던 값)에 다시 접근하게 된다는 것
    • 이는 시간적 지역성의 예시로, 데이터가 한 번 사용되면 곧바로 다시 사용될 가능성이 높음을 보여줌

공간적 지역성(Spatial Locality)

arr이라는 배열 내의 메모리들이 순차적으로 사용됨
공간적 지역성은 메모리 상에서 서로 가까이 위치한 데이터에 대해 순차적으로 접근할 가능성이 높다는 개념

  1. 코드 예제에서 arr[i]와 arr[i+1]는 메모리 상에서 인접해 있으며, 반복문이 순차적으로 실행됨에 따라 이 인접한 원소들이 차례대로 사용된다...
    • 즉, 어떤 데이터를 사용했다면, 그 데이터와 메모리 상에서 가까이 있는 다른 데이터도 곧 사용될 가능성이 높다는 것

캐시의 구성요소

멀티코어의 시대

CPU는 다수의 코어 보유, 각 코어마다 자체 캐시 보유

캐시 라인의 상태...?

M과 S와 I.. MSI프로토콜... 다수의 캐시가 있는 경우 어떻게 최신 상태를 보장할까요?
MESI 프로토콜이라는 것도 있음

TS 3주차 : 기본 타입 익혀보기

타입의 종류

  1. boolean
  2. number
  3. string
  4. 배열
  5. 튜플(tuple)
  6. enum

Nest.js 1주차

들어가며

Nest.js

TypeScript의 단짝 / 오직 TypeScript만 지원한다.
Express.js와는 다름!

Express.js의 장단점

  1. 웹 개발이 빠르고 간편함
    • 패키지 설치만 하면 WAS 서버를 바로 띄울 수 있음
  2. 그러나 복잡한 웹 서버를 개발해야 한다고 하면?
    • 라이브러리와 모듈을 전부 설치해줘야 함

회고

캐싱...

어렵다...

0개의 댓글