socket 개발자들은 오랜시간 다수의 클라이언트의 요청을 효율적으로 처리하기 위한 방법들을 연구해왔다. 그 결과 수많은 해결책들이 개발되었고, 아직도 더 효율적인 방법을 찾으려 노력중인 부분이다. 다중 클라이언트 요청을 처리하는 해결책입출력 다중화epoll리얼 타임 시그널멀티 스레드멀티 프로세스IOCP그 중 현재까지 가장 빠르고 효율적인 방법으로 사용되는 방법이 바로 IOCP(Input/Output Completion Port)다.IOCP는 멀티 스레드와 같이 사용되는 방법으로 사용할 thread를 미리 만들어 놓고 socket에서의 input 또는 output이 완료(completion)되었을 때 잠들어있는 thread를 깨워서 처리하는 방식이다. 보통 가장 최적화 할 수 있는 thread의 수는 프..
게임 내에서 플레이어가 활동하는 세상을 맵이라고 한다. 맵의 종류로는 오픈월드, 인스턴스 던전 등 여러가지가 있다. 오픈월드의 경우 한번에 그 큰 맵을 다 로드하고 플레이 할 수 없기 때문에 여러 타일로 맵을 나누고 각 타일들을 필요할 때마다 로드하는 방법을 사용한다.타일로 나누어진 월드맵을 로드하는 방법은 크게 심리스 방식, 존 방식 2가지가 있다. 로드 방식에 따라 게임의 스타일도 다르기 때문에 심리스 월드, 존 월드 라고 부르기도 한다. 심리스(seamless)플레이어의 시야에 들어오는 맵을 미리 로드하는 방식이다. 주로 오픈월드 게임에서 사용하는 방법이다.장점 : 플레이어의 이동에 따라 필요한 부분을 바로 로드 하기 때문에 부드럽게 맵을 이동할 수 있다단점 : 초반 로딩이 길며, 플레이 도중에 계..
네트워크 게임에서 서로간의 이동을 동기화 하기 위해 여러 방법이 사용될 수 있다.기본적으로, 이동처리를 하기 위해 매 프레임 마다 이벤트와 상태를 전송하는 방법이 있다.이론적으로 가장 정확한 동기화를 할 수 있는 방법 같지만 클라이언트가 늘어날 수록 전송하는 횟수가 기하급수적으로 늘어나게 되어 비효율적이다. 키보드를 누르고 있는 동안 움직이는 캐릭터가 있다고 할 때 게임이 60프레임이라면 초당 60번 키가 눌리고 있다는 패킷을 전송한다.cs로 구성된 게임에서 이 패킷은 (n=클라이언트 수)번 전송된다.이렇게 많은 패킷을 서버에서 처리하기엔 부하가 너무 크다.부하를 줄이기 위해 논리적으로 패킷의 전송 횟수를 줄이는 기법이 Dead Reckoning 이다. Dead Reckoning이벤트가 발생할 때 마다 ..
운동방정식의 적분실제 시뮬레이션 되는 운동방정식은 정확한 정북인 힘들기 때문에 근사치를 구하는 수치적분을 이용한다. 수치적분무한히 작은 변화량에 대해 적분하는 것이 아닌 이산적인(discrete)변화량에 대해 적분한느 것.결과독 이산적이 되므로 결과는 근사값이 된다. 예를 들어를 보자일반적인 정적분으로 위 식을 적분한다면 dv는 뭏나히 작은 속도변화, dt는 무한히 작은 시간변화량 이지만 수치적분을 할 때는 이산적인 시간증가값 dt, 이산적인 속도변화값 dv를 사용한다. 오일러 기법 어떤 함수를 근사하는 방법중 하나로 테일러 급수(Tayler series)가 있다.오일러 기법은 테일러 급수에서 1차 미분에 해당하는 항들만 사용하는 기법이다.나머지 항들은 고차항(higher-order term) 또는 절단..
벡터의 내적과 외적을 하는 법을 알아보고 내적과 외적이 의미하는 것들에 대해 알아보자 내적 A벡터와 B벡터의 내적은 다음과 같이 계산할 수 있다 또는 내적이 의미하는 것 A벡터의 B에 대한 투영 벡터의 길이 투영 벡터는 A*B값을 B단위벡터에 곱하는 것으로 구할 수 있다 A벡터와 B벡터의 사이 cos값(A와 B가 단위벡터일 때만 성립) 외적 A벡터와 B벡터의 외적은 다음과 같이 구한다 또는 외적이 의미하는 것 방향 두 벡터에 동시에 수직인 벡터의 방향과 같다 좌표계에 따라 오른손, 왼손 으로 방향을 알 수 있다 크기 두 벡터가 만드는 평행사변형의 넓이를 뜻한다 두 연산을 점과 면의 충돌검출에 응용할 수 있는데 그 주제에 대해서는 다음에 글을 새로 써야겠다 개념 면의 단위벡터 A와 충돌 검출을 할 점과 꼭..
현재 벡터의 길이를 구한 후 각 인자에 나누면 된다. 2차원에서의 예 Cocos2d-x 에서 활용 inline cocos2d::Vec2 Normalize(cocos2d::Vec2 vec){ float length = sqrtf(powf(vec.x, 2) + powf(vec.y, 2)); cocos2d::Vec2 newVec = cocos2d::Vec2(vec.x/length, vec.y/length); return newVec; }
프로세스 일부만 메모리에 적재하여 실행하는 장점프로그램 크기가 실제 메모리 크기에 제한받지 않는다.멀티 프로그래밍 정도를 높여 cpu이용율, 처리율을 높인다.swap I/O양이 적어 각 프로그램이 빠르게 실행된다. 가상 메모리작은 물리 메모리로 큰 가상 기억 장치를 제공overlay를 사라지게 함주로 요구 페이징(demand paging)으로 구현 요구 페이징(demand paging)필요한 페이지만 주 기억장치에 적재페이지가 메모리에 있는지 디스크에 있는지 valid/invalid bit로 표시(1=valid 0=invalid)메모리에 없는(invalid) 페이지를 참조하려 하면 페이지 부재 트랩(page-fault trap) to OS순수 요구 페이징(pure demand paging)아무 페이지도 ..
- Total
- Today
- Yesterday
- DesignPattern
- swift
- 운영체제
- mongoDB
- scala
- 수학
- C++
- Cocos2d-x
- C
- 국내여행
- SHADER
- OS
- 자료구조
- database
- Git
- ios
- 데이터베이스
- Java
- machine learing
- SOCKET
- rxswift
- C/C++
- game
- JSP
- 알고리즘
- Spring
- ue4
- SwiftUI
- 드라마
- winsock
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |