C#/C# 서버

[C#/서버] 캐시 이론

진서박 2023. 8. 16. 17:49
반응형

인프런 - Rookies님의 강의

https://www.inflearn.com/course/%EC%9C%A0%EB%8B%88%ED%8B%B0-mmorpg-%EA%B0%9C%EB%B0%9C-part4

 

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버 - 인프런 | 강의

네트워크/멀티쓰레드/운영체제 등 핵심 전공 지식을 공부하고 게임 서버를 바닥부터 만들어보면서 MMORPG 기술을 학습하는 강의입니다., MMORPG 개발에 필요한 모든 기술, C# + Unity로 Step By Step! 🕹

www.inflearn.com

 

 

데이터 처리 과정을 다음과 같이 간단하게 나타내었다.

1 코어 == 1 쓰레드

 

램과 CPU간의 물리적인 거리가 멀어서, 매 메모리 갱신마다 램에 가서 데이터를 갱신하는 것은 매우 비효율적이다.

 

이 때 캐시 장치가 사용된다

 

왼쪽이 코어(쓰레드)

 

단기기억(레지스터) 메모장(캐시 기능)을 하는 기억장치들이 있다.

어떤 변수나 메모리에 있는 값을 조작한다고 했을 때 바로 실제 메모리에 올려서 변경하는 것이 아니라,

일단 캐시 장치에 기억을 해놓고 나중에 시간이 지나면 한번에 메모리에다 올리게 된다.

-> 중간에 정보의 변경이 일어 나더라도, 캐싱된 정보만 변경하면 되므로 더 효율적

 

캐싱은 다음과 같은 캐시 철학 하에 이루어진다.

1. TEMPORAL LOCALITY : 최근에 접근했던 주소값을 다시 접근하는 경향

- "시간적"으로 보면, 가장 최근에 사용한 변수가 재사용될 확률이 높다.
- 방금 사용된 변수를 캐싱해 놓으면 편하지 않을까?
 

2. SPACIAL LOCALITY : 최근 접근했던 주소값 근처의 주소들을 접근하는 경향.

- "공간적"으로 보면, 방금 접근한 변수의 주소와 인접한 주소들이 사용될 확률이 높다
- 방금 접근한 변수의 주소와 인접한 주소들을 캐싱해 놓으면 편하지 않을까?

 

 

 

하지만 이 모든것들은 "멀티쓰레드" 환경으로 들어서게 되면 문제가 생긴다.

ex) 1번 태스크에서 캐싱해놓은 정보는 2번 태스크는 모름

-> 2번 태스크가 1번 태스크에서 캐싱한 정보를 또다시 캐싱하는 문제가 생길 수 있음

반응형

'C# > C# 서버' 카테고리의 다른 글

[C#/서버] AutoResetEvent / ManualResetEvent  (0) 2023.08.20
[C#/서버] SpinLock  (0) 2023.08.18
[C#/서버] 메모리 배리어  (0) 2023.08.16
[C#/서버] 쓰레드 풀 (ThreadPool)  (0) 2023.08.16
[C#/서버] 쓰레드 (Thread)  (0) 2023.08.16