안녕하세요 개인프로젝트로 <span style="font-size:9pt;">Entity시스템을 적용한</span> <div><span style="font-size:9pt;"><br></span></div> <div><span style="font-size:9pt;">c++ 게임엔진을 조그맣게 만들어보고 있는 중인데요...</span></div> <div><div> <div><br></div> <div>여태까지 단일 스레드로</div> <div><br></div> <div>로직 -> 렌더</div> <div><br></div> <div>를 처리했었는데 게임오브젝트 1300개와</div> <div><br></div> <div>스프라이트 애니메이션을 재생시키면</div> <div><br></div> <div>단일 스레드로도 프레임이 80은 나왔었거든요.</div></div></div> <div><br></div> <div>그런데 이번에 단일스레드에서 멀티스레드로 바꿔볼까 생각하고</div> <div><br></div> <div>로직스레드와 렌더링스레드를 나눠 처리하도록 해봤습니다.</div> <div><br></div> <div>로직스레드에서는</div> <div><br></div> <div>각 게임오브젝트와 컴포넌트의</div> <div><br></div> <div>Awake, Start, Enable, Update, Release 함수를 루프하며</div> <div><br></div> <div>렌더링스레드에서는</div> <div><br></div> <div>오직 Render 만을 처리하는데</div> <div><br></div> <div>크리티컬섹션을 쓰지 않으니 당장은 문제가 없지만</div> <div><br></div> <div>게임오브젝트가 Release되는 시점에서 참조에러가 뜨며 프로그램이 뻗구요</div> <div><br></div> <div>크리티컬섹션을 쓰니 참조에러는 해결되었지만</div> <div><br></div> <div>Sleep을 걸지 않았을 때 Leave와 동시에 Enter가 되면서</div> <div><br></div> <div>하나의 스레드만 점유하는 현상이 생겼구요</div> <div><br></div> <div>각 스레드함수에 Sleep(1) 을 걸어주면서 모든 문제가 해결되었지만</div> <div><br></div> <div>프레임레이트가 단일스레드를 쓰는 것만도 못한 결과가 나오더라구요.</div> <div><br></div> <div>게임오브젝트가 많은 씬에서는 80대로 단일 스레드와 비슷한 프레임이 나왔지만</div> <div><br></div> <div>게임오브젝트가 전혀 없는 씬에서는 630대로 단일 스레드의 5400에 비해</div> <div><br></div> <div>엄청 낮은 수준의 퍼포먼스가 나오네요.</div> <div><br></div> <div>아무리 스레드를 쓰더라도 Enter와 Leave로 락과 언락을 해주는 이상</div> <div><br></div> <div>단일스레드로 돌리는거나 마찬가지인 것 아닌가요?</div> <div><br></div> <div>아니면 꼭 필요한 곳에서만 Enter와 Leave를 써야 하는걸 제가 설계를 잘못한 걸까요?</div> <div><br></div> <div>아니면 Sleep(1) 말고 하나의 스레드가 점유하는 현상을 해결할 수 있는 방법이 있나요?</div> <div><br></div> <div>사실 프레임이 떨어지는건 Sleep(1) 때문인 것 같거든요.</div> <div><br></div> <div>신입프로그래머에게 해결할 길을 알려주세요...ㅜㅜ</div> <div><br></div> <div><br></div> <div><br></div> <div>참조...</div> <div><div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201612/148154886345bd403f789840f09f234a576fd5dc71__mn227147__w642__h512__f165768__Ym201612.png" width="642" height="512" alt="onethr_081.png" style="border:none;" filesize="165768"></div> <div style="text-align:left;">단일스레드 | 게임오브젝트 1344개 | 프레임 81</div> <div style="text-align:left;"><br></div> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201612/1481548864c9cad1e88d044ad5984e8cc9b83b2fa0__mn227147__w642__h512__f10993__Ym201612.png" width="642" height="512" alt="onethr_5431.png" style="border:none;" filesize="10993"></div> <div style="text-align:left;">단일스레드 | 게임오브젝트 0개 | 프레임 5431</div> <div style="text-align:left;"><br></div> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201612/1481548864153a01ff0efe404fb5f30e4c79f8654d__mn227147__w642__h512__f179282__Ym201612.png" width="642" height="512" alt="thread_079.png" style="border:none;" filesize="179282"></div> <div style="text-align:left;">멀티스레드 | 게임오브젝트 1344개 | 로직프레임 79 | 렌더프레임 79</div> <div style="text-align:left;"><br></div> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201612/1481548864ac3d4f4238bc4285952e87ada884e410__mn227147__w642__h512__f10920__Ym201612.png" width="642" height="512" alt="thread_633.png" style="border:none;" filesize="10920"></div> <div style="text-align:left;">멀티스레드 | 게임오브젝트 0개 | 로직프레임 633 | 렌더프레임 624</div><br></div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.