개인공부/Rookiss 게임 서버13 Chapter 2 - 메모리 관리 (2) Allocator 기본 new와 delete를 사용하는 대신 메모리 풀링 기법을 사용하면 속도를 향상시킬 수 있음 class Knight { public: Knight() { cout 2023. 3. 29. Chapter 2 - 메모리 관리 (1) Reference Counting /*----------------- RefCountable ------------------*/ class RefCountable { public: RefCountable() : _refCount(1) {} virtual ~RefCountable() {} int32 GetRefCount() { return _refCount; } int32 AddRef() { return ++_refCount; } int32 ReleaseRef() { int32 refCount = --_refCount; if (refCount == 0) { delete this; } return refCount; } protected: int32 _refCount; }; class Wraight : pu.. 2023. 3. 29. Chapter 1 - 멀티쓰레드 프로그래밍 (7) Reader-Writer Lock /*---------------- RW SpinLock -----------------*/ /*-------------------------------------------- [WWWWWWWW][WWWWWWWW][RRRRRRRR][RRRRRRRR] W : WriteFlag (Exclusive Lock Owner ThreadId) R : ReadFlag (Shared Lock Count) ---------------------------------------------*/ // W -> R (O) // R -> W (x) class Lock { enum : uint32 { ACQUIRE_TIMEOUT_TICK = 10000, MAX_SPIN_COUNT = 5000, WRI.. 2023. 3. 29. Chapter 1 - 멀티쓰레드 프로그래밍 (6) Lock-Free Queue (참고만) template class LockFreeQueue { struct Node; struct CountedNodePtr { int32 externalCount; // 참조권 Node* ptr = nullptr; }; struct NodeCounter { uint32 internalCount : 30; // 참조권 반환 관련, 비트를 30과 2로 쪼개어서 사용 uint32 externalCountRemaining : 2; // Push, Pop 다중 참조권 관련 }; struct Node { Node() { NodeCounter newCount; newCount.internalCount = 0; newCount.externalCountRemaining = 2; coun.. 2023. 3. 29. 이전 1 2 3 4 다음