월 66,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
수업자료로 시간 단축 해보는 중에 궁금한게 생겨 질문드립니다.
안녕하세요 수강생입니다. 연습문제 보던중 재미있는 생각이나서 테스트중이었는데요. 수업자료에서의 방법으로 작업하면 총 100의 일이 있을때 코어가 4개면 1~25/26~50/51~75/76~100 이렇게 나누어진다 생각하였고 상대적으로 1~25이 빨리끝나고 76~100이 늦게 끝나니 시간적으로 손해가 생긴다 생각하였습니다. 그리하여 저는 CountPrime 함수 부분을 수정하였는데 start=i ,end=Max_NUMBER로 받아오고 (i는 main함수부의 for(int i=0;i<coreCount;i++)의 i입니다.) 추가로 coreCount를 받아와서 for ( int number = start; number<end; number+=coreCount) 로 구현하였습니다. 이러면 제 생각으로는 100개의 일을 4개의 코어가 나누어 일한다고 치면 코어1 : 1 5 9 13 17~~ 코어2 : 2 6 10 14 18~~ 코어3 : 3 7 11 15 19~~ 코어4 : 4 8 12 16 20~~ 이런 방식으로 나누어서 작업하고, 상대적으로 오래걸리는 76~100번대 일을 코어들이 골고루 나눠받은만큼 소요시간 역시 적게 걸릴것이라 예상했습니다. 그러나 결과적으로 소요시간은 같게나왔으며 생각하지못한 CPU 이용률에서 차이가 났습니다. (기존방식 cpu 100% 수정시 cpu 60%) 참고로 Max값은 100,000,000으로 잡고 진행하였고 소요시간은 33초 ~ 34초 근처로 나왔습니다. 질문드리고 싶은것은 위 상황에서 소요시간 차이가 거의 나지않는 이유와 CPU 사용량에 차이가 나게되는 이유를 알고싶습니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
질문드립니다
컨텍스트 스위칭에서 질문드립니다. 1. 컨텍스트 스위칭은 쓰레드간에 일어나는것이고 컨텍스트 스위칭이 일어나기전 진행하던 모든작업들이 프로세스 제어블록에 저장되어 다음것을 실행시키는것으로 아는데 다른책을 통해 공부할땐 프로세스간의 컨텍스트 스위치은 무겁고 쓰레드간의 컨텍스트 스위칭은 스택만을 별도로 메모리를 가지기에 가볍다. 라고 공부를 했는데 이 이야기는 한 프로세스내의 한쓰레드에서 다른 쓰레드의 컨텍스트 스위칭 비용은 가볍고, 다른 프로세스의 쓰레드로 컨텍스트 스위칭은 무겁다고 보면 될까요? 2. 커널모드 동기화기법인 강의에서나온 랜덤메타,갑질메타를 사용하게되면 결국 한번은 커널모드로 들어가야하기에 기존에 실행중이던 유저모드의 프로세스의 쓰레드는 대기상태로 돌아가 스케쥴러에 의해 다시 선택받길 기다리는 상태이기에 느리다.가 맞는걸까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
MemberJob에 대한 인수목록을 찾지 못하고있습니다.
Job.h에 있는 코드를 그대로 복붙을 하였는데도 위와 같은 에러가 계속 발생하고있습니다.. 올려주신 파일도 MemberJob부분에서만 계속 에러가 발생하고 있더라구요,,,뭐가 문제인지 잘 모르겠습니다..ㅠㅠ
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
서버 포폴 관련해서 질문이 있습니다
채팅 + 순차접속서버 포트폴리오를 준비 중입니다 다른게 아니라 포트폴리오를 어떤 방식으로 제출해야하는지 모르겠어서 질문 드립니다.. 프로젝트를 직접 제출해야하는건지 코드를 캡쳐하여 ppt파일을 만들어야 하는지 실행 화면을 제출해야 하는지 모르겠습니다 클라이언트는 실행 화면을 녹화하여 유튜브에 올리라고 하셨는데 한 컴퓨터에서 클라 여러개+서버가 동시에 돌아가다 보니 실행 화면을 제출하기엔 너무 지저분해보이고 이해도 잘 되지 않을것 같아서요 그리고 제가 이해하려고 코드에 주석을 주렁주렁 달아놨는데요 그대로 제출해도 되는지 궁금합니다 (코드를 제출해야 한다면) 이런 질문이 이 강의에 맞을지 모르겠으나.. 죄송한 마음을 무릅쓰고 질문 남겨봅니다
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
JobQueue 관련해서 질문있습니다 !
전에 드렸던 질문의 연장이지만.. 한 공간에 많은 유저가 몰려있어 각자의 위치동기화를 위해 주변 플레이어들에게 Broadcast 하는 상황이라고 가정할때강의에서 말씀하신 JobQueue 구조로 간다고 해도연속된 위치동기화를 위해 Broadcast Job 을 계속해서 수행한다고 하면 사실상 Broadcast 내의에서 Session을 접근할때의 Lock 때문에 기다려야 하는 현상은 동일한것 아닌가 궁금합니다.만약 제가 JobQueue 에 대해 놓친부분이 있다면 리마인드 해주시면 너무너무 감사드리겠습니다 !!!
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요 이번 강의에 궁금한 점이 있어 질문 드립니다.
TryDelete에서 popCount를 검사하는 부분에서 이중으로 검사하는 이유가 정말 궁금합니다. 혹시나 다른 수강생도 궁금하셨을까 싶어 찾아보니 이미 질문주신 분이 있어 답변을 보았습니다. 다만 popcount가 1인 것을 검사하고 펜딩 리스트를 분리까지 하였다면 그 이후에 다른 스레드가 어떤 식으로 참견하여도 delete에 방해가 될 수 없다는 생각이 자꾸 듭니다. 분리 이후엔 사실상 popCount가 의미가 없는 것이 아닌지 여쭙고 싶습니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
강의 커리큘럼 관련되서 질문 드립니다.(커리큘럼 관련되서 질문할 곳을 찾지 못해서 ㅠㅠ 여기다 올린점 양해 부탁드려요 ㅠ)
안녕하세요. 커리큘럼 관련되서 질문드리고자 이렇게 글 올립니다. 저는 일단 C++을 사용하는데 있어 큰 무리없이 사용하는 편입니다. (modern c++포함) 반면 C#은 거의 모르는 상태인데요, 강사님 커리큘럼중에 C#을 이용해서 MMORPG를 만드는 커리큘럼도 있던데 아래처럼 병행해서 커리큘럼을 짜도 될지 궁금해서 문의 드립니다. [C#과 유니티로 만드는 MMORPG게임 개발시리즈] Part1, Part3, Part7, Part9 만 듣고, [C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4 이렇게 들어서 일단 Unreal 로 연동하는 강의가 나올때까지, 유니티 2D게임을 C++게임서버에 연동해보고 싶은데요, 굳이 C# 게임서버 제작 강의를 들어야할 필요가 있을까요?? C#으로 게임서버를 만들어야겠다는 생각이 들면 듣겠지만, 지금은 우선 게임 클라이언트 자체를 서버에 연동시키는것(구체적으로 맵을 어떻게 서버에서 처리하고, 스킬이나 hit 판정을 어떤식으로 하는지에 대한 것들)을 목표로 하고 있는데, C#게임서버 강의랑 C++ 게임서버 강의가 겹치는 부분이 많아서 C#게임서버 강의를 통해 들어야할지 고민이 됩니다. 결론으로 C# 강의 Part1, Part3, Part7, Part9 와 C++강의 Part4 이렇게 병행하는데, 무리 없이 커리큘럼을 수행할 수 있는지 궁금합니다. 긴글 읽어주셔서 감사드리며, 항상 좋은 강의 올려주셔서 감사합니다.!!!
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
RecvBuffer 강의 handle Error
handle Error 10014가 뜹니다 msdn 찾아보니 주소.? 버퍼 사이즈가 잘못되었다고 하는데 어느 부분에서 잘못된건지 못찾겠습니다 코드 비교해보면서 찾는데 안찾아지네요.. 어느 부분을 찾아보는게 좋을까요 흑흑 아 그리고 올려주신 파일은 실행하면 이런 오류가 뜨는데 이건 왜그러는걸까요.. ㅜㅜㅜ 파일 경로가 달라서 그런거같은데 맞나요
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
메모리풀, 오브젝트풀 강의 관련 궁금한 점이 있습니다.
바쁘신 와중에 항상 답변해주셔서 정말 정말 감사드립니다.. 이번 강의를 보고 궁금한 점이 여러 개 생겼는데 depth : 16; sequence : 48; reserved : 4; next : 60; 이번에 나온 SList 관련해서 위처럼 쓰인 코드를 처음봤는데 어떤 의미로 쓰이는 것인지 궁금합니다. 메모리풀에서 push를 할 때 메모리풀이 보통 실제로 메모리풀에서 pop된 데이터인지 아닌지를 검사하는 것을 메모리풀 수준에서 검사하지는 않나요? 락프리 스택이나 락프리 큐, 메모리풀 등을 구현하여 사용할 때 보통 테스트는 어떻게 하는지 궁금합니다. 제 수준에서 기껏해야 순회 함수를 만들어서 push, pop된 데이터를 일일이 확인해보거나 push , pop을 많이 수행한 이후 실제로 데이터의 갯수가 올바르게 들어갔는지 확인하는 정도밖에 생각이 안나느데 혹시 조언해주실만한 테스트 방법이 있을까요..?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
placement new 에러가 납니다 ㅠㅠ
이런 식으로 실제로는 하나의 인수만 사용하고 있는데도 2개의 인수를 사용한다는 에러가 뜹니다.. 강사님 코드를 복붙을 하여도 새로운 프로젝트를 만들어도 똑같이 떠서.. 따로 opearator new를 정의하면 컴파일 에러가 없어지기야 하지만 의미가 없고.. 이런 간단한 것조차 질문드려서 정말 죄송하지만 예전에 가끔 placement new를 사용할 땐 문제가 없었는데 왜 이러는지 도저히 해결할 수가 없어서 죄송하지만 질문 드려봅니다
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
멀티스레드에서 shared_ptr에 대해서 주의해야 될 점은 없나요?
c++ 레퍼런스에 shared_ptr에 대해서 스레드 안전하다고 나와있긴한데 이렇게 shared_ptr을 멀티스레드 환경에서 사용하면서 신경써야 될 점은 없는건가요? 그렇다면 저희가 예전에 refcountable 클래스는 왜 만든 것인지도 궁금합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
TypeCast 강의에서 궁금한 부분이 있습니다
typename을 붙이는 이유가 뭘까요? 뒤에 TypeAt<TypeList<Tail...>, index - 1>::Result <- 이 부분이 타입이라는걸 그냥 설명해주기 위함일까요.?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요
이번 실습에서 컴플리션 포트로 넘겨주는 장치키로 세션의 주소를 사용하고 있는데 실제로 실무에선 장치키로 어떤 값을 사용하는지 정말 궁금합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요 궁금한 점이 있어 질문 드립니다
1. 소켓 송수신 버퍼가 실제로 TCP 단에서 다루는 버퍼가 되는 것인가요? 2. send() 함수가 실패하는 경우는 송신 버퍼가 가득 차는 경우인데 수신 측에서 recv를 하지 않는 경우를 제외하고 어떤 경우에 실패하는지 너무 궁금합니다. 3. 실제로 유저 애플리케이션 계층에서 송신 데이터가 많다고 할 때 TCP가 어느 정도 속도로 송신버퍼를 비우는지(얼마나 빨리 보내주는지) 알기 위해서 어떤 정보를 확인해야 될까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
메모리 풀 할당 사이즈 관련
MemoryPool* pool = new MemoryPool(size) 부분에서 할당 메모리 크기인 size가 각 for문 마다 고정되어야 한다고 생각했습니다. 그런데 강의 코드에서는 아래와 같이 size가 for loop를 한번 돌 때 마다 늘어나더라고요. Memory::Memory() { int32 size = 0; int32 tableIndex = 0; for (size = 32; size <= 1024; size += 32) { MemoryPool* pool = new MemoryPool(size); _pools.push_back(pool); while (tableIndex <= size) { _poolTable[tableIndex] = pool; tableIndex++; } } for (; size <= 2048; size += 128) { MemoryPool* pool = new MemoryPool(size); _pools.push_back(pool); while (tableIndex <= size) { _poolTable[tableIndex] = pool; tableIndex++; } } for (; size <= 4096; size += 256) { MemoryPool* pool = new MemoryPool(size); _pools.push_back(pool); while (tableIndex <= size) { _poolTable[tableIndex] = pool; tableIndex++; } } } 제가 강의를 듣고 생각한건 0~1024 byte까지는 32 byte단위, ~2048 byte까지 128 btye단위, ~4096 byte까지 256 byte단위로 할당 한다고 생각했거든요. 근데 위 코드에서 첫번째 for문을 예를 들면 처음에는 Memory Pool을 32 byte 사이즈로 할당하는데 그다음에는 64 byte, 그다음은 96 byte ... 로 할당 사이즈가 점진적으로 증가하더라고요. 저는 1024 byte까지는 32byte로 쭉 하다가, 1024 byte부터 128 byte 단위로 할당할것이라고 생각했습니다. 그래서 저는 아래와 같은 식으로 되어야 하지 않을까 생각했습니다. Memory::Memory() { int32 size = 0; int32 tableIndex = 0; for (size = 32; size <= 1024; size += 32) { MemoryPool* pool = new MemoryPool(32); _pools.push_back(pool); while (tableIndex <= size) { _poolTable[tableIndex] = pool; tableIndex++; } } for (; size <= 2048; size += 128) { MemoryPool* pool = new MemoryPool(128); _pools.push_back(pool); while (tableIndex <= size) { _poolTable[tableIndex] = pool; tableIndex++; } } for (; size <= 4096; size += 256) { MemoryPool* pool = new MemoryPool(256); _pools.push_back(pool); while (tableIndex <= size) { _poolTable[tableIndex] = pool; tableIndex++; } } } 제가 이해하지 못한 부분이 어떤것인지 알고 싶습니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
SLIST_HEADER 관련
SLIST_HEADER의 NextEntry 변수 중 Reserved라는 4비트짜리 변수의 쓰임새가 궁금합니다. 64비트 주소의 하위 4비트를 아껴서 Reserved 변수가 쓸 공간을 만드는건 이해했습니다. 그런데 그렇게 아껴서 만들어낸 4비트라는 공간을 Reserved는 어떻게 활용하는 건가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
메모리풀 강의에서 궁금한 점이 있습니다
Memory.cpp파일 memory 생성자의 for (size = 32; size <= 1024; size += 32) { MemoryPool* pool = new MemoryPool(size); _pools.push_back(pool); while (tableIndex <= size) { _poolTable[tableIndex] = pool; tableIndex++; } } 부분이 이해가 안되는데요 for문에서 size가 32씩 증가하면 pool이 두번째는 64바이트로 세번째는 96바이트로 만들어지는건데 이게 맞는건가요? 1024까지를 32바이트 크기로 쪼개 32개 2048까지를 128바이트 크기로 쪼개 8개 4096까지를 256바이트 크기로 쪼개 8개 총 48개가 된다고 이해했는데 그러면 세개의 for문 속 new MemoryPool(size)의 size를 각 32 128 256으로 해야 하는 것이 아닌지.. 하는 의문이 듭니다 어느 부분에서 잘못 이해했는지 모르겠습니다 ㅜㅜ
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
특정 클래스에서만 Atomic을 써서 관리하는 이유가 궁금합니다
MemoryPool에선 관리하는 변수들을 Atomic으로 관리하셨는데 Send,Recv Buffer나 Session에서는 아토믹없이 내부에서 int형만으로 처리하는걸 보고 궁금증이 생겼습니다. 메모리풀뿐만 아니라 세션이나 send,recvBuffer에서도 멀티쓰레드를 통해 처리되지 않나요? 아토믹 변수를 쓰시는 철학(?), 어떤 배경에서 쓰실 생각을 하셨는지 궁금합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
패킷 직렬화 관련 질문있습니다 !
수업에서 사용했던 Protobuf 외에 Json 으로도 우리 서버에서 실습을 해보고 싶습니다 !!혹시 Json 으로 패킷 직렬화를 사용하려면, 1) 라이브러리는 어느걸 사용해야 하나요 ?2) 라이브러리 적용 및 사용 관련된 문서나 간단한 가이드가 있을까요 ?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
이 환경설정 방법을 통채로 다 외워야하나요???
타 강의와 궤를 달리하는 어마어마한 복잡함인데 이걸 다 외워야하나요... 아 그리고 바이너리 폴더안데 .ilk? 파일이 저는 안생기는데 문제가 생기나요 라이브러리 폴더에는 또 .lib라고 또 하나가 더있네요 저는