프로젝트 : https://github.com/HoonInPark/ServerHyperion.git 본 포스트에 대한 내용은 feat/framesync 브랜치에 있다. 문제 지금 내 코드는 서버가 시작할 때 Info 객체를 일정수 만큼 할당하고 배열에 넣는다. 그
더미 클라이언트로 스트레스 테스트하기를 해봤지만, 당시 발견했던 문제는 그대로였다. 메인 루프가 느려서 객체 풀이 고갈되는 거였다. 전송이 완료되면 메시지 unique_ptr을 담은 풀로 반환되는데, 이 때 접속자 수에 따라 고갈되는 속도가 달랐고, 고갈되지 않는 경우
현재 테스트 환경은 localhost로 구축된 상태. 향후 AZURE에 올리면 더 빈번하게 아래의 문제가 일어날 것이다. 문제 더미 클라이언트로 스트레스 테스트하기에서 테스트 환경을 구축한 뒤 30명, 50명, 100명으로 접속자를 늘려가며 테스트를 해봤다. 이렇게
프로젝트 : https://github.com/HoonInPark/ServerHyperion.git 본 포스트에 대한 내용은 feat/lockfree 브랜치에 있(었)다. 지금은 dev에 병합됐다. 문제 드미트리 뷰코프의 MPMC 순환큐를 내 프로젝트에 사용하고자 한
문제 MPMC에서 적용되는 lock-free buffer queue만들기를 하던 도중, 참고한 코드에서 std::memoryorderrelaxed를 쓰고 있었다. 모두의 코드의 C++ memory order 와 atomic 객체에선 C++의 멀티 스레딩 내에서 스레드
프로젝트 : https://github.com/HoonInPark/ServerHyperion.git 본 포스트에 대한 내용은 feat/lockfree 브랜치에 있다. 문제 내가 이전에 작성한 순환큐 구현하기를 feat/framesync에 적용하고 main에까지 병합했
문제 내가 처음 IOCP 서버를 다루기 시작할 때, 다음과 같은 코드가 이상해 보였다. 분명 스레드를 신호에 따라 멈추고 다시 동작하게 만드는 함수들이 있는데도, 1 ms만 쉬고 다시 다음 라운드를 돌게 만드는 거였다. 왜? SNS에 질문해 보니 누군가가 '시스템 콜'에 대해 알아보라고 했다. 해결 위 코드에서 1 ms 쉬고 다시 다음 라운드에서 유의미...
https://github.com/HoonInPark/CodingTestPractice/blob/main/ProgrammersTest/OddEvenTree.h 문제 루트 노드가 설정되지 않은 1개 이상의 트리가 있습니다. 즉, 포레스트가 있습니다. 모든 노드들은 서로
프로젝트 : https://github.com/HoonInPark/Hyperion.git 문제 본 프로젝트의 목표는 다음과 같다. 3D 게임의 서버 권위 모델을 구현 이를 위한 물리 시뮬레이션이 서버에서 작동해야 하고, 이것의 결과 값이 클라이언트에 Replicate
프로젝트 : https://github.com/HoonInPark/Hyperion.git 본 포스트에 대한 내용은 feat/obop 브랜치에 있다. 사담 누가 말했는데, 고수 개발자들이 쓴 네이버 블로그의 낭만은 개발이랑 상관 없는 소리도 같이 섞여 있는 거라고. 내
문제 현재 나의 AccepterThread() 함수 내의 루프는 32ms 마다 계속 돈다. AccepterThread 이해하기에서 언급했듯, PostAccept(...) 함수 내의 AcceptEx(...) 함수가 Client Info 세션 객체의 접속을 받도록 대기시
문제 "무례하긴, 순회야" - 객체 풀과 순회 인터페이스 구현하기에서 내부 멤버를 deque로 변경했다. 근데 deque는 반복적으로 푸시/팝을 할 경우 동적할당이 일어난다. 누구인가, 누가 런타임에 동적할당을 하였어? 해결 순환큐를 만들어서 멤버로 바꿔 넣어주자.
프로젝트 : https://github.com/HoonInPark/ServerHyperion.git원래 내가 만든 객체풀은 다음과 같이 구현돼 있었다.근데 std::queue는 순회 불가능.정 순회하고 싶으면 하나하나 디큐해서 값을 읽고 다시 집어넣어야 한다.
프로젝트 : https://github.com/HoonInPark/ServerHyperion.git본 포스트에 대한 내용은 feat/framesync 브랜치에 있다. 현재 서버에서 Client Info 객체의 풀링을 구현하고 있는데, 접속이 들어오면 풀에서 디