UnityServer - 캐시

k_hyun·2022년 10월 26일
0

Unity_Server

목록 보기
3/32

캐시


캐시는 컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다.

캐시는 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용한다.

Locality

Temporal locality

시간적으로 보면, 최근에 사용했던 기억 장소들이 집중적으로 액세스 되는 경향이 있다.

해당 장소들이 Cache에 우선적으로 저장되는 것을 의미한다.

Spacial locality

프로그램 실행 시 접근하는 메모리의 영역은 이미 접근이 이루어진 영역의 근처일 확률이 높다.

램에서 접근한 영역의 근처 영역들을 Cache에 갱신한다.

실험

static void Main(string[] args)
        {
            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(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(end - now);
            }
        }


열 먼저 순차적으로 접근한 경우에 비해 행 먼저 접근한 경우 시간이 더 오래 걸린다.

예를 들어 5*5 배열인 경우
[][][][][]

[][][][][]

[][][][][]

[][][][][]

[][][][][]

이런식으로 있는데 첫 행 첫 열의 배열의 값에 접근을 하면 해당 행의 근처에 있는 열들이 캐시로 이동된다.

따라서 다음 열의 값을 가져올 때 빠르게 가져올 수 있다.

반면 행을 우선적으로 접근하는 경우 매번 캐시의 값이 갱신이 되야한다.

결국 RAM에 접근해야 하므로 시간이 더 오래 걸린다는 결과를 알 수 있다.

0개의 댓글