C#/네트워크 27

[c#][서버] 데드락

자물쇠가 여러 개인 경우두 사람이 한 화장실을 쓰려 함그런데 들어가려면 열쇠 두 개가 필요각자 자물쇠 한 개 씩 들고 있으면서 다른 자물쇠를 기다린다면?서로 다음 자물쇠를 기다리며 못들어가는 상황데드락 해결 방법규칙을 정한다무조건 위쪽 자물쇠부터 잠그고위쪽을 잠근 사람이 아래쪽도 가져가자코드 예시class SessionManager{ static object _lock = new object(); public static void TestSession() { lock(_lock) { } } public static void Test() { lock(_lock) { UserManager.TestUser(); ..

C#/네트워크 2024.06.02

[C#][서버] Lock 기초

Interlocked의 단점사실상 정수만 사용 가능몇백줄의 쓰레드에서 하나하나 인터락을 다 걸 수 없다.자주 사용하긴 함Monitor동시에 여러 쓰레드가 접근하면 문제가 되는 부분임계 영역, critical section_이걸 선을 그어서 아무도 건들지 마라 라고 선언을 해보자static int number = 0;static object _obj = new object(); static void Thread_1() { for (int i = 0; i 이렇게 하면 Race Condition 문제를 해결할 수 있음Monitor.Enter -> 화장실 문을 잠그는 행위다른 쓰레드가 들어올 수 없음Monitor.Exit -> 문을 열어주는 행위다른 쓰레드가 접근 가능이러한 상황 -> 상호배제, M..

C#/네트워크 2024.06.02

[C#][서버] Interlocked

문제 상황static void Thread_1(){ for(int i=0; i다음을 실행하면, 10만번 더하고, 10만번 뺐으니까 0이 출력돼야겠지만?이렇게 이상한 값이 출력된다.이유우선 ++, -- 연산은 내부적으로 다음과 같이 처리된다.int temp = number; // 0temp += 1; // 1number = temp; // number = 1int temp = number; // 0 temp -= 1; // -1 number = temp; //number = -1;이렇게 세 줄이 모두 실행되기 전에 다른 쓰레드에서 number를 수정해 버린다면?number = 1 -> number = -1 로 점프해버리는 상황이 발생한다.게임에서 예시를 들면돈 -= 100서버 다운 -> 이러면 돈..

C#/네트워크 2024.06.01

[C#][서버] 캐시 이론

고오급 식당주문 현황스테이크(1번 테이블)피자(4번 테이블)스파게티(3번 테이블)직원이 주문 받고, 포스기로 가는데 너무 멀다 -> 어떻게 해결?최대한 기억해 뒀다가, 수첩에도 적고, 많이 쌓이면 포스기로 간다주문을 번복했다 하더라도, 포스기까지 가지 않은 상태라면 수첩에서 수정하면 됨직원이 여러명이 된다면?각자 수첩이 있고, 직원끼리 공유하지 않음다른 직원에게 주문을 번복한다면?실제 컴퓨터직원 = 코어코어ALU(연산)캐시(기억)포스기RAM캐시 철학Temporal Locality시간적으로 보면, 방금 주문한 테이블에서 추가 주문이 나올 확률이 높다.방금 주문한 걸 메모해 놓자Spacial Locality공간적으로, 방금 주문한 사람 근처의 사람이 추가 주문을 할 확률이 높다.방금 주문한 사람과 합석하고 ..

C#/네트워크 2024.05.31

[C#][서버] 서버 개론, 멀티쓰레드 개론

서버 개론다른 컴퓨터에서 연결이 가능하도록 대기 상태로 상시 실행중인 프로그램식당처럼 손님이 올 수 있도록 열고 대기중인 상태손님이 오면 메뉴/정책에 따라 서비스 제공게임 서버의 종류Web Server(Http Server)테이크아웃 전문 식당손님이 음식을 받아 떠나면 이후로 연락이 끊김질의/응답용도드물게 정보 요청/갱신실시간 interaction 불요식당에서 손님한테 먼저 접근할 일 없음주문 후 손님이 떠나면, 손님의 상태를 잊고 지냄(stateless게임에 국한되지 않고, 웹 서비스를 만드는데 사용처음부터 만드는 경우는 사실상 없고, 프레임워크를 하나 골라서 사용ASP.NET(C#)Spring(JAVA)NodeJS(JS)Django, Flask(Python)PHPGame Server(TCP, Bina..

C#/네트워크 2024.05.30