2022년 3월 3일 목요일

[c# 캐시 구조]

 


using System;
using System.Threading;
using System.Threading.Tasks;

namespace ServerCore
{

    /// <summary>
    /// 캐시작동 테스트
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            int[,] arr = new int[10000, 10000];

            ///수학적으로는 분명 같은 시간이 걸릴것이다...
            ///하지만 실제로는? 엄청난 차이가 난다
            ///space와 관련이 있다
            ///

            ///5*5배열이라고 가정
            ///[][][][][] [][][][][] [][][][][] [][][][][] [][][][][]
            ///
            ///첫번째 코드는 x부터 바꾸기 때문에
            ///[0][1][2][3][4] 이런식으로 차근차근 접근함
            ///캐시는 공간법칙때문에 [0][][][][] 에서 여기 또 접근할 것이라고 생각함
            ///그래서 캐시에 [0][][][][]을 가지고 있음
            /// 다음 접근이 [0][1][][][] 1 부분이니까 캐시히트라서 램에 다시 갈필요없이 연산함(캐시값 업데이트) 상대적으로 빠르다
            ///


            ///두번째는 [0][][][][] [1][][][][] [2][][][][]
            ///이런식으로 되서 캐시의 공간적 이점을 살릴수 없다..
            /// [0][][][][]을 캐시에 넣어둿지만 다음이 [1][][][][] 이기 때문에
            /// 속도가 느리다

            {
                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}");
            }
        }
    }
}

댓글 없음:

댓글 쓰기

git rejected error(feat. cherry-pick)

 문제 아무 생각 없이 pull을 받지않고 로컬에서 작업! 커밋, 푸시 진행을 해버렷다. push에선 remote와 다르니 당연히 pull을 진행해라고 하지만 로컬에서 작업한 내용을 백업하지 않고 진행하기에는 부담스럽다(로컬작업 유실 가능성) 해결하려...