1장 멀티플레이어 게임의 간추린 역사 복습 문제 1-1) 로컬 멀티플레이어 게임과 네트워크 멀티 플레이어 게임의 차이는 무엇인가? 로컬 같은 경우에는 한 컴퓨터에서 2인이 함께 게임을 플레이 함. 네트워크 멀티 플레이어 게임은 네트워크 상에서 다수의 컴퓨터가 함께 플레이 가능함. 1-2) 로컬 네트워크 연결의 세 가지 예를 들어보자. 1) 직렬 포트로 컴퓨터를 서로 연결 2) 랜 네트워크 연결 3) 전화선(?) 1-3) 랜에서 동작하는 게임을 인터넷에서도 동작하게 하려면 어떤 점을 주로 고려해야 하는가? 랜으로 멀티플레이가 가능하다면, 다른 연결 수단으로도 멀티플레이가 가능하다. 다만 레이턴시, 즉 네트워크로 데이터를 전송하면서 발생하는 시간 지연을 해결해야 한다. 1-4) 머드 게임이란 무엇이며 추후 ..
현재 운영체제 수업을 듣고 있는데, 과제로 리눅스를 사용하는 과제가 주어졌습니다. 내용은 즉슨 "두개의 프로세스를 실행하고, 서로 네임드 파이프라인 통신을 하게 하라. 단 각 프로세스는 fork를 통해 자식프로세스를 만들고, 자식은 전송을 부모는 읽고 출력하는 형식으로 제작하라. 그리고 Ctrl + C 가 입력되면 좀비 프로세스를 만들지 않고 종료하라" 라는 과제가 주어졌습니다. 그래도 교수님게서 사용할 기본 함수들은 알려주셔서 그나마 쉽게 풀어나갈 수 있었습니다. 통신 기본 코드 char *chatTtoJ = "./chatTtoJ"; char *chatJtoT = "./chatJtoT"; mkfifo(chatTtoJ, 0666); mkfifo(chatJtoT, 0666); fdr = open(chatT..
강의 : (인프런)C++과 언리얼로 마드는 MMORPG 게임 개발 시리즈 - 게임서버 데이터를 저장하거나, 패킷으로 전달할 때 정수값이나 char 값은 그대로 저장할 수 있으나 동적으로 할당된 값은 그대로 저장할 수 없습니다. 예를 들어 아래의 구조체를 가진 데이터를 보내거나 저장하려고 할때, target이나 vector의 값을 저장해도 후에 복원시킬 때 제대로 된 값을 복원할 수 없습니다. 따라서 이러한 값을 byte나 배열로 만들어서 보내거나 저장할 수 있도록 하는 것을 직렬화라고 합니다. class Player { public: int32 hp = 0; int32 attack = 0; Player* target = nullptr; vector buffs; }; XML vs JSON javascrip..
책 : 뇌를 자극하는 윈도우즈 시스템 프로그래밍 우리가 흔히 말하는 Heap이란, malloc, new 등을 통해서 동적으로 생성할 수 있는 메모리 공간을 뜻합니다. 보통 malloc 등을 통해서 선언된 동적 배열 공간은, 멀티쓰레드 환경에서 쓰레드들 간의 공유하는 상황이 발생하게 됩니다. 그러다보니, 다른 쓰레드가 그 공간을 건들여서 해제를 하거나 하는 상황이 발생할 수 있습니다. 그래서 Windows에서는 쓰레드 별로 사용할 힙을 별도로 할당해줄 수 있습니다. 이것을 Dynamic Heap이라고 합니다. 다이나믹 힙같은 경우에는 해제할 경우 힙에 있는 모든 데이터가 해제되므로 링크드 리스트 같은 자료구조 형에서도 유용합니다. - 디폴트 힙(Default Heap) : 공유하고 있는 기본적인 힙 - 힙..
책 : 뇌를 자극하는 윈도우즈 시스템 프로그래밍 1 ) 이름있는 뮤텍스(NamedMutex) 동기화 - 원래 선언된 Mutex는 하나의 프로세스에서 내부 쓰레드들만 사용할 수 있는데, 이름있는 뮤텍스를 사용하면 다른 프로세스들이 그 뮤텍스를 사용할 수 있습니다. 코드를 예시로 확인해 보겠습니다. if 1 -> 이름있는 뮤텍스를 생성하는 코드 else -> 외부 프로세스에서 뮤텍스 접근하여 사용하는 코드 예제 더보기 #include #include #include #include HANDLE hMutex; DWORD dwWaitResult; void ProcessBaseCriticalSection() { dwWaitResult = WaitForSingleObject(hMutex, INFINITE); swi..
책 : 뇌를 자극하는 윈도우즈 시스템 프로그래밍 1 ) 뮤텍스(Mutex) 기반 동기화 - 뮤텍스 생성 hMutex = CreateMutex( NULL, // 디폴트 보안관리자. FALSE, // 누구나 소유 할 수 있는 상태로 생성. //(TRUE일 경우, 뮤텍스를 생성하는 쓰레드가기회를 얻음) NULL // numaned mutex ); - Mutex 사용 WaitForSingleObject(hMutex, INFINITE); /********************* 임계영역 *********************/ ReleaseMutex(hMutex); 예제 더보기 #include #include #include #include #define NUM_OF_GATE6 LONG gTotalCount = ..
책 : 뇌를 자극하는 윈도우즈 시스템 프로그래밍 1 ) 임계영역(Critical Section) 동기화 - 크리티컬 섹션 오브젝트 변수 선언 CRITICAL_SECTION hCriticalSection; - 오브젝트 초기화 InitializeCriticalSection(&hCriticalSection); - 임계영역 지정 EnterCriticalSection(&hCriticalSection); //임계영역 지정 /************* 임계영역 *************/ LeaveCriticalSection(&hCriticalSection); //임계영역 탈출 - 임계영역 삭제 DeleteCriticalSection(&hCriticalSection); 예제 더보기 #include #include #in..
책 : 뇌를 자극하는 윈도우즈 시스템 프로그래밍 커널 레벨(Kernel Level) 쓰레드 : 프로그래머 요청에 따라 쓰레드를 생성 및 스케줄링하는 주체가 커널 인 경우, 이럴 경우에는 쓰레드를 생성해주고, 스케줄링하는 대상이 커널이 된다. 커널 영역 : 유저 영역을 제외한 나머지 영역 유저 영역 : 프로세스의 산하 쓰레드들이 가지고 있는 코드 영역, 데이터 영역, 스택 및 힙 영역을 가리킴. 장점 : 커널에서 직접 제공하기 때문에 안전성과 다양한 기능성이 제공된다. 단점 : 커널에서 제공해 주는 기능이기 때문에 유저 모드에서 커널 모드로의 전환이 빈번하게 일어난다. 따라서 이는 성능의 저하로 이어지게 된다. 유저 레벨(User Level) 쓰레드 : 커널이 쓰레드 모델을 지원하지 않을 경우(혹은 커널이..
- Total
- Today
- Yesterday
- Dreamhack
- Select모델
- 고양이
- STL
- 보안
- 개발
- c++
- 레지스터
- 인제대학교
- 지뢰찾기
- 멀티쓰레드
- 정보보안
- 스레드풀
- 컨퍼런스
- BFS
- 자료구조
- 백준
- 알고리즘
- 드림핵
- 워셜알고리즘
- 링크드 리스트
- 학교
- 야경
- 시스템보안
- queue
- 더블버퍼링
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |