Programming

Programming/C++ & Unreal

C++ RTTI 구현

개요 RTTI는 Run Time Type Information의 약자로 프로그램이 실행된 시점에 Type을 알 수 있는 기능이다. 기본 #include using namespace std; class A { }; class B { }; int main() { A a; B b; cout

Programming

Redis 랭킹 동점 처리

알고 있는 레디스 랭킹 동점 처리 관련 기법(?)을 몇 개 정리해보았다. (JS) 1. 기본 redisClient.ZREVRANGE("ranking:myRank", 0, -1, 'WITHSCORES', PrintRedisRank); 0) E : 100 1) D : 100 2) A : 100 3) B : 95 4) C : 70 기본적으로 Redis Rank(ZSet)은 score를 기준으로 정렬한 다음에 동점자가 있으면 key를 기준으로 다시 정렬해서 준다. 이외의 동점자 기준은 Redis에서 지원해주지 않아서 서버 애플리케이션 단에서 처리해줘야 한다. 2. 동점자는 같은 등수로 async function PrintRank( name ){ // 먼저 랭킹을 가져올 유저의 score를 가져온다. var sc..

Programming/C# & Unity

C# 게임 서버 (.net core) 장단점

C# 콘솔 서버를 실무에서 사용해보면서 느껴진 신입의 입장에서 주관적인 장점과 단점을 정리해보았다. 장점 1. 메모리 관리 수월 : C++은 잘못된 메모리를 접근하고 쓰는 순간 망한다. 심지어 스마트 포인터를 사용하거나 new-delete 관리를 잘해줘도 파편화 때문에 터져버린다. 하지만 C#의 GC는 단순 소멸 생성 외에도 파편화, 순환 참조 까지 다 해결해줘서 코드를 쉽게 깔끔하고 문제없이 동작하도록 짤 수 있다. 2. 유니티 프로젝트와 찰떡 : 클라이언트에서 사용하는 기획 데이터 코드나 패킷 구조체등을 그냥 그대로 가져다 쓸 수가 있다. 똑같은 일을 두 번 하는 뻘짓을 줄여주는 것 외에도, 클라-서버 간에 공통 작업이 누락되어 생기는 문제 같은 것들을 원천 차단할 수 있어서 편리하다. 3. 치명적 ..

Programming/Network

레디스 랭킹 (zrank, sorted set) 최대값 최소값

Key(Member) : String 이므로 제한 딱히 없음. Value(Score) : Double, -9007199254740992 ~ 9007199254740992 ( -2^52 ~ 2^53 ) 갯수 : 2^32 -1 실제로 저 영역이 벗어나면 값이 이상해지더라... (Test5, Test11과 Test 9, Test10은 서로 다른 값으로 설정함) 문서 출처 : redis.io/topics/data-types Data types – Redis *Data types *Strings Strings are the most basic kind of Redis value. Redis Strings are binary safe, this means that a Redis string can contain a..

Programming

시간복잡도 Big-O 정리

시간 복잡도? Big-O? 시간 복잡도는 알고리즘의 실행 속도를 "변수 N을 기준으로 대충 얼마 걸린다."라는 걸 표현하는 가장 쉽고 빠른 방법이다. Big-O는 특히 "최악의 상황에서 대충 얼마 정도 걸려요~"라는 걸 수식으로 요약해놓은 것이다. 경험상 프로그램에서 평균적이나 최선의 케이스 같은 건 크게 의미가 없고, 최악의 경우에 얼마가 걸리는지 파악하는 게 제일 중요하고 심지어 계산하기도 제일 편하다. 그래서 대부분 시간 복잡도를 물어보면 Big-O를 기준으로 이야기하곤 한다. (이하 내용에서도 시간 복잡도 = Big-O로 이야기하고 있으니 참고 바람.) 시간 복잡도 기초 O(N) : N의 시간이 걸림. - 오더(Order) N이라고 읽음 O(N²) : N제곱의 시간이 걸림. - 오더 엔 제곱 O(..

Programming/Linux and Web

docker 오류

Centos7로 도커를 가지고 놀면서 발생했던 오류 몇개를 정리 해보았다. 1. Cannot connect to the Docker daemon Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 도커 데몬 꺼져있어서 오류발생. systemctl start docker - 도커 데몬 켜고 systemctl enable docker - 도커 데몬 등록 2. Permission denied Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post ..

Programming/C++ & Unreal

Xcode tbb 설치

1. 터미널 실행 2. 터미널로 tbb 설치 brew install tbb 3. Xcode 프로젝트 파일 클릭 4. Build Settings에 Include, Lib Path 지정 5. Build Phases에 라이브러리 파일 링크 추가 끝 boost 설치도 거의 비슷한데, brew 말고 macPort 라는 것을 통해서 받았음.

Programming/C++ & Unreal

C++ 오브젝트풀 개선 with tbb

#pragma once #include #include #include template class CObjectPool{ public: CObjectPool(int size = 100){ _maxSize = size; for (int i = 0; i < _maxSize; ++i) { T* newObject = new T(); _qObjects.push(newObject); } } ~CObjectPool() { while (!_qObjects.empty()) { T* object; if( _qObjects.try_pop( object ) == true ){ delete object; } } _maxSize = 0; } // 오브젝트를 꺼낸다. T* PopObject() { T* retVal; // 꺼낼게 ..

Programming/C++ & Unreal

tbb concurrent bounded queue 차이

tbb에 있는, concurrent queue는 자주 썼었는데, concurrent bounded queue는 뭐하는 물건인고 궁금해서 찾아보았음. bounded queue (경계큐) - 용량을 지정 할 수 있는 큐 concurrent bounded queue(동시성 경계큐) - 용량을 지정하여 사용할 수 있는 멀티 쓰레딩 큐, 더이상 넣을 수 없거나 뺄 수 없으면 블락킹 된다. (try_push/pop 으로도 사용 가능) vs concurrent queue - 용량을 지정할 수 없고, 뺄 것이 없으면 실패한다. (애초에 pop 이라는 함수 자체가 없고, Try_pop 만 가능) #include #include using namespace std; int main(int argc, const char *..

Programming/C# & Unity

C# try catch finally

나는(일반적으로) 전체적으로 크게 감싸서 Exception을 잡을 때는 try-catch-finally를 쓰고, 해제와 같은 일을 할때는 try-finally를 쓴다. 1. try-catch-finally try { throw new NullReferenceException(); } catch ( Exception e ) { Console.WriteLine( $"It's Main's catch. :: {e.Message}" ); } finally { Console.WriteLine( "It's Main's finally." ); } 이건 제일 기본형. 패킷 단위에서 Exception을 막을 때 유용하게 씀. 2. try-finally static public void DoException() { try ..

장형이
'Programming' 카테고리의 글 목록 (3 Page)