2021. 6. 20. 21:57 Server

동기화 기법들

반응형

Server Programmer 들에게 동기화란 매우 민감하며 중요한 주제이다.

 

동기화 기법이란 Thread들에게 특정 Resource에 대한 접근 권한을 주는 기법이다.

 

각각의 동기화 기법들의 종류, 간단한 설명을 알아보자.

 

Lock 

 - 가장 기본적인 동기화 기법이며 critical section을 활용하여 동기화를 한다.

 

Mutex

 - 단 하나의 Thread 접근을 허용한다. [모든 프로세서에서 접근 가능.]

 - 이름을 지정하여 여러 Process가 접근 가능.

 

Shemaphore

 - 지정된 갯수만큼의 Thread 접근을 허가한다. [갯수 지정가능한 Mutex 느낌]

 -> 임계영역에 진입 시 lock, 임계영역 탈출 후 unlock을 하여 접근횟수를 관리한다.

 - Mutex처럼 이름을 통해 접근이 가능.

 

Event

 - 신호, 비신호 두 가지의 상태가 가능하다. [Manual mode, Auto reset mode]

 - 임계영역 탈출 시 자동으로 비신호상태로 바꿔주는 Auto Reset 여부를 설정이 가능하다.

 - 임계영역 진입 시 Non signaled 상태에서 signaled 상태로 변경한다.

 - 타 Thread 들은 signaled 상태인 event에 접근 시 대기한다.

 - Auto Reset Event 가 아닌 경우 임계 영역을 탈출 한 후 Signal 상태로 계속 존재한다.

  -> ResetEvent를 통해서 Non signaled 상태로 변경해줘야함.

 - 보통 Event의 경우 Thread간의 실행순서를 지켜야 하는 경우 많이 사용한다.

 

Atomic

 - 특정 int형 변수에 대한 접근을 제한하는 기법

 - Interlock을 통해서 Increase, Decrease, Compare 가 일반적으 로 사용된다.

 

반응형
Posted by Sweetmeats_boy

2021. 6. 20. 21:36 용어 관련

SPOF란

반응형

Single point of failure의 약자.

 

여러 요소 중 특정 system이 공장난 경우 전체 시스템이 멈춰버리는 경우를 의미

 

. Mobile Game의 경우 Mapping DB가 고장나 User의 계정 정보를 찾지 못하는 경우

. App 구동 시 version 확인을 못하여 Game 실행이 안되는 경우.

. Game Logic 중 무한 포문 혹은 dead lock에 걸리는 경우.

반응형

'용어 관련' 카테고리의 다른 글

Process에 대해서  (0) 2023.12.13
proxy server , reverse proxy server  (0) 2021.07.18
Zero Trust Model  (0) 2021.07.18
DeadLock, Live Lock  (0) 2021.06.20
데드 레커닝[Dead reckoning] 이란?  (0) 2019.08.30
Posted by Sweetmeats_boy
반응형

Winsock 관련하여 Socket을 처리하는 방법들을 여러가지가 있다. 

그중 대표적인 몆가지 방법들에 대해서 개념적으로 알아보자.

 

우선 소켓의 처리방식은 Proactor / Reactor 방식으로 구분된다.

. Proactor : 이벤트가 발생 시 특정 함수를 호출하는 방식

 -> 밑의 ASIO, IOCP 방식이 해당

. Reactor : loop를 돌면서 이벤트가 발생했는지 일일히 확인하는 방식

 -> Select , epoll 방식

 

 

Select 방식

. SingleThread 기반의 다중 I/O 처리 방법

. 송신, 수신, 예외 이벤트가 발생한 소켓들을 관리하는 3가지의 "Set"으로 구분한다.

. 각각의 Set을 매 순간 확인하여 해당 이벤트가 발생한 소켓을 목록으로 얻어온다.

. 소켓목록을 순회하며 송신, 수신, 예외에 따른 처리를 수행한다.

. 단, 최대 관리할 수 있는 소켓의 갯수는 1024개로 제한된다.

 

epoll 방식

. Select 방식의 단점을 보완한 리눅스에서 사용이 가능한 I/O 방식

. Select와 같은 동기형 통지방식을 따르며 FD_SET을 운영체제가 직접 관리한다.

. non blocking, blocking을 설정이 가능하다.

 

IOCP 방식

. c++ 게임 서버 개발자라면 필히 공부해야 하는 것.

. In/Out Completion  Port의 약자

. 기본적으로 Overlapped I/O Callback 방식을 따른다.

. IOCP 내부의 Thread Pool을 사용하여 소켓의 송수신을 관리한다.

. 따라서 적은 수의 Thread 로 소켓관리가 가능하며, 별도의 Thread 생성, 제거를 할 필요가 없음.

 -> Callback 함수들을 해당 Thread들을 통해 호출한다.

 . 주의할 점으론 I/O가 완료된 Overllaped 구조체에 접근해야 한다는 것이다.

 -> I/O 가 미완료된 Handle에 접근하면 안됨.

 

ASIO 방식

. Boost lib에 존재하는 방식.

. 아마도 C++ 20에 들어갈 예정이라고 한다...

. Asynchronous IO의 약자.

반응형

'Server' 카테고리의 다른 글

Process와 Thread의 차이점  (0) 2021.06.20
동기화 기법들  (0) 2021.06.20
서버 Socket 설정하는 방법들  (0) 2019.09.06
게임 서버에서의 Log 구성  (0) 2019.09.04
게임 서버에서의 Log의 분류  (0) 2019.09.04
Posted by Sweetmeats_boy

블로그 이미지
Sweetmeats_boy

태그목록

Yesterday
Today
Total

달력

 « |  » 2025.11
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함