(C# : Server) 4. 캐시 이론

Posted by : at

Category : Charp-Server


컴퓨터의 구조는 대략적으로 이러하다


[[   CPU  ]]
[ 레지스터 ]
[ L1 캐시  ]
[ L2 캐시 ]
     |
     |
[[   RAM  ]]

  • 그럼 무엇을 캐시에 우선적으로 넣어둘 것인가?
    • Temporal Locality : 방금 호출된 메모리
    • Spacial Locality : 방금 호출된 메모리 근처의 메모리
  • 위 두가지 캐싱 방법으로 인해 문제가 발생한다.
    • 만약 캐시에 올린 데이터가 멀티스레드 환경으로 인해 RAM의 데이터를 누군가 읽기 혹은 쓰기를 한다면??
int[,] arr = new int[10000, 10000];

{
    long now = DateTime.Now.Ticks;
    for(int y = 0; y < 10000; y++)
        for(int x = 0; x < 10000; x++)
            arr[y, x] = 1;
    long end = DateTime.Now.Ticks;
    Console.WriteLine($"(y, x) 순서 걸린 시간 {end - now}");
}

{
    long now = DateTime.Now.Ticks;
    for(int y = 0; y < 10000; y++)
        for(int x = 0; x < 10000; x++)
            arr[x, y] = 1;
    long end = DateTime.Now.Ticks;
    Console.WriteLine($"(x, y) 순서 걸린 시간 {end - now}");
}

/*

이론적으론 둘이 똑같은 시간이 나와야 하지만
(x, y)가 2배 이상오래 걸린다.
캐싱의 접근 방법때문이다.

*/

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links