경합 조건은 스레드들끼리 차례를 지키지 않고 같은 메모리에 작업을 진행해 순서와 결과가 예측이 불가능한 것을 뜻한다. 간단한 식당 주문 예시를 하나 보자.주문 현황에 콜라가 등장했다. 이것을 본 직원들 3명이 동시에 반응해, 3개의
위의 그림을 보자. 번개 그림은 CPU 코어를, 웃는 얼굴은 프로그램을 수행하는 스레드를 뜻한다. 우리가 여러 프로그램을 한번에 실행할 수 있는 이유는, 한 코어가 여러 스레드에 빠른 속도로 옮겨다니며 일을 처리하기 때문이다. 코어
본 게시물은 Rookiss님의 '[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버' 강의를 듣고 정리한 내용임을 미리 알립니다.
락을 통해 특정 구간, 혹은 특정 변수를 상호배타적으로 막는 행위는 멀티스레드 프로그래밍에서 반드시 필요하다. 하지만 값을 읽는 Read 행위는 가능하게 하고, 값을 변형시키는 Write 행위만 상호배타적으로 막을 수 있게 하려면
이제 본격적인 서버를 만들어볼건데, 먼저 간단한 네트워크의 구조를 살펴보자. 빨간색 컴퓨터가 우리가 쓰는 PC, 즉 단말이라고 생각하자. 같은 네트워크 안에 있는 단말들은 스위치를 통해 통신을 진행한다. 한 단말이 같은 네트워크의
본 게시물은 Rookiss님의 '[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버' 강의를 듣고 정리한 내용임을 미리 알립니다.
현재 클라이언트가 서버에 연결 시도하는 코드를 보자.try 블록안의 socket.Connect(endPoint)가 서버의 엔드포인트와 연결하는 부분이다. 이는 블로킹 함수로, 이 동작이 끝날 때까지 다른 행동을 못하는 상황이 된다.
본 게시물은 Rookiss님의 '[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버' 강의를 듣고 정리한 내용임을 미리 알립니다.
저번까지 우리는 버퍼에 대한 클래스를 제작했다. 이 버퍼를 통해 데이터를 주고 받는데, TCP 프로토콜을 쓰는 우리의 서버는 패킷의 완전성을 검사해야한다. 즉, 데이터가 오더라도 패킷이 온전한지 검증을 하고 처리를 해야하는 것이다.