본문 바로가기

전체 글142

GPG Study 1.7 자원과 메모리 관리 GPG Study 1.7자원과 메모리 관리그래픽, 사운드, 음악, 비디오, 애니메이션등을 사용하는 종합예술인 게임 프로그래밍은 그 목적을 달성하기 위하여 정말 질적 양적으로 많은 자원을 사용한다. 그리고 동시에 유저의 기기에서 쌩쌩 잘 돌아가야하기 때문에 자원을 최대한 효율적으로 다룰 수 있어야한다. 최대한 잘 돌아가게 때려박는것, 이것이 게임 최적화라 할 수 있다.따라서 우리는 자원들을 효과적으로 다루기 위하여 자원과 자원 관리 클래스를 만들 필요가 있다. 자원은 자신의 데이터를 쉽게 불러오고, 폐기할 수 있어야하고, 자원 관리자는 자원들을 효과적으로 관리, 분배, 접근제어할 수 있아야 한다. 앞서 이야기 했던 핸들 개념을 사용하여 관리작업을 수행한다면 더욱 훌륭할 것이다.자원 클래스 BaseResou.. 2015. 7. 1.
GPG Study 1.2 TMP를 이용한 수학연산 GPG Study 1.2TMP를 이용한 빠른 수학연산템플릿 메타 프로그래밍 (TMP)템플릿 : Generic한 프로그래밍을 목표로 만들어진 C++ 문법template //For Ani Type T void GenericFinc(T param) //About T Type Param { param.DoSomething(); } //Call DoSomething()템플릿 메타 프로그래밍템플릿의 타입추론이 컴파일 시간에 이루어진다는 것을 응용하여 컴파일 시간에 가능한 중간작업들을 미리 처리하는 프로그래밍 방법론. 템플릿을 일종의 Pre-Compiler로 사용하여 최적화한다. 컴파일 시간은 보다 길어지지만, 런타임의 수행시간이 짧아지게 프로그래밍 할 수 있다. 여기에 템플릿 특유의 Generic한 파워가 합쳐지면.. 2015. 6. 22.
멀티 쓰레드 서버 버그잡기 2 멀티 쓰레드 서버 버그잡기 2전체 쓰레드 상황 빠른 스캔DB 쓰레드들은 GQCS에서 건전하게 대기 중IO 쓰레드들은 FlushSend에서 방황 중FlushSend 빠른 스캔I/O 쓰레드 대부분이 FastSpinlock에 걸려있다. 데...데드락?하지만 해당 임계영역에 블로킹 걸릴 소지가 없다. 단일 Lock만 사용하기에 Lock자원의 교착상태가 발생할 여지가 없다.실제로 덤프 시점에 하나의 쓰레드가 락을 빠져나가는 것이 포착되었다. Lock은 문제가 아니야. FlushSend를 호출하는 DoSendJob으로 화살을 돌려본다.DoSendJob 빠른 스캔DoSendJob은 Blocking이 걸리기 쉬운 구조로 생겼다. 의심이 증폭된다.세션의 FlushSend가 실패하게되면 LSendRequestSession.. 2015. 5. 27.
Modern Effective C++ Item 34 : std::bind 보다 람다를 쓰자 std::bind보단 람다를 쓰자.std::bind는 C++98에서 std::bind1st와 std::bind2nd 그리고 stl에서 2005년부터, 그 이전에는 TR1에서부터 쭉 많은 사람들에게 사용되었다. 그래서 누군가는 std::bind를 버리라는 말이 띠껍게 들릴지도 모른다. 하지만 C++11에서 채용된 람다는 강력한 기능들과 이해하기 쉬운 문법으로 무장하여 std::bind보다 더 좋은 선택이 되었다. 그리고 C++14에 와서는 람다는 std::bind의 완벽한 상위호환이 되었다.std::bind는 가독성이 떨어진다.std::bind보다 람다를 선호하는 가장 큰 이유중 하나는 바로 가독성이다. 시간에 맞춰 알람을 주는 함수를 만드는 예를 살펴보자.using Time = std::chrono::s.. 2015. 5. 19.