본문 바로가기

게임개발/게임서버11

TLS(Thread Local Storage) 멀티 스레드 환경에서 TLS를 사용하지 않은 경우 동시성 문제가 발생하는 모든 구역에 Lock을 걸어버리면 데이터의 안전성은 보장되겠지만 상황에 따라서 문제가 발생할 수 있다. 예를 들어서 게임로직에 A던전, B던전, C던전에 대한 코드가 작성이 되어 있는데 갑자기 클라이언트 단에서 모든 유저가 A던전에 입장을 하려고 할 때 A 던전에 대한 게임로직이 바빠져서 평상시에 입장하는 것보다 시간이 더 오래 걸리게 될 수 있다. 이러한 상황에서는 오히려 멀티 스레드로 환경을 구축하는게 더 안 좋게 된다. TLS를 사용해서 해결 TLS( 스레드 로컬 스토리지 )를 사용하면 프로세스가 전역(Global) 인덱스를 사용하여 액세스할 수 있는 각 스레드에 대해 고유한 데이터를 제공할 수 있다. 각 쓰레드에 TLS 슬롯.. 2023. 10. 28.
ReadWriteLock 개념 https://velog.io/@livelyjuseok/%EA%B0%9C%EC%9D%B8%EA%B3%B5%EB%B6%80-%EC%84%9C%EB%B2%84%EC%8B%A4%EC%8A%B512-ReaderWriterLock-%EA%B0%9C%EB%85%90 개인공부) 서버실습(14) - ReaderWriterLock 개념 지난 시간에 Auto, Manual, Mutex를 통한 Event 형식의 lock 구조에 대해 배웠다. Event 형식의 특징은 관리자(커널) 영역에 작업이 필요하기에Context Switching이 발생하여 구동이 느리기에 빠른 작업이 필요 velog.io 구현하기에 앞서 결정 할 규칙 1. 재귀적 락 2. 스핀락 정책(5000번 루프를 돌고도 Lock을 획득할 수 없으면 잠시 스.. 2023. 10. 26.
교착 상태(Deadlock) 교착 상태란(Deadlock)? 한정된 자원을 둘 이상의 주체가 서로 동시에 사용하려고 대기할때 모든 작업의 진행이 멈춰버리는 현상 ThreadA는 공유자원 A를 점유한 상태로 공유자원 B를 점유하려고 요청했는데 ThreadB가 점유중이여서 대기하고 있는 상태이고 ThreadB는 공유자원 B를 점유한 상태로 공유자원 A를 점유하려고 요청했는데 ThreadA가 점유중이여서 서로 무한정 대기가 일어나는 상황이다. 데드락 상황이 발생하는 코드) namespace Test { class SessionManager { static object _lock = new object(); public static void Test() { lock (_lock) { UserManager.TestUser(); } } pub.. 2023. 10. 17.