출처 : https://df.nexon.com/df/news/update?p=web&mode=view&no=2685706
현재 던전앤파이터 클라이언트는 메인 스레드라 지칭하는 하나의 스레드를 통해 캐릭터, 몬스터, 스킬과 같은 객체의 생성과 이동, 타격 판정 등의 모든 논리적 연산을 수행하고 있습니다.또한 이 모든 연산의 결과물을 화면에 표현하기 위한 과정인 랜더링 역시 모두 메인 스레드를 통해 순차적으로 처리하고 있습니다.
이는 싱글 코어 CPU를 탑재한 PC가 주를 이루던 2000년대 초/중반에 개발된 대다수의 게임들이 차용한 방식이었습니다.
하지만 2000년대 후반에 접어들며 멀티 코어 CPU를 탑재한 PC가 대중화되며, 일부 상용 게임 엔진들을 필두로 클라이언트의 성능을 향상시키기 위해 멀티 코어를 활용하기 위한 병렬 처리 구조를 차용하기 시작했습니다.
던전앤파이터 클라이언트 역시 일부 영역에 한해 병렬 처리 구조를 차용하여 성능 최적화를 진행하였으나 모험가님들이 만족하실 만큼의 성과를 거두진 못했습니다.
이는 클라이언트의 코어 영역인 전투 로직과 랜더링 과정 등이 여전히 직렬 처리 구조로 구성되어있기에 앞서 언급드린 메인 스레드라는 하나의 스레드에만 과도한 연산 부하가 일어나는 문제가 발생하기 때문이었습니다.
먼저 그동안 던전앤파이터 클라이언트의 코어 영역을 병렬 처리 구조 형태로 변경할 수 없었던 이유를 설명(변명)드리자면..
15년 이상 서비스를 이어오며 생산된 방대한 코드의 양,
병렬 처리 구조로 개선하는 과정에서도 서비스는 유지되어야 하기에 기존 구조에 맞춰 신규 콘텐츠들이 계속 생산된다는 문제,
마지막으로 앞서 언급된 문제들을 다 해결한다고 해도... 개선된 구조가 서비스의 안정성을 담보해 줄 수 있는가? 에 대한 물음에 자신있게 답할 수 없었기 때문이었습니다.
그럼에도 가야 할 길을 가지 않고 계속 미뤄둘 순 없기에.. 서비스의 안정성을 저해시키지 않는 선에서 선택할 수 있는 최선의 방법을 찾는 과정을 꾸준히 찾고 시도해 보았습니다. 아래에서 소개할 작업들은 앞선 과정을 거치며 진행된 작업들로 지난 한 달간 퍼스트 서버에 우선 배포하여 기본적인 안정성 테스트를 진행하였고 이렇게 정식 버전에 배포하게 되었습니다.
물론 아직까진 100% 만족스러운 수준은 아니지만.. 멀티 코어의 지원을 위한 첫 걸음을 떼었다는 측면에서 의미 있게 바라봐 주시기를 부탁드리겠습니다.렌더 스레드가 추가됩니다.메인 스레드를 통해 연산된 결과물을 전달받아 DirectX를 이용하여 화면에 출력하기 위한 일련의 과정을 담당하는 스레드입니다. - 기대 효과 : 메인 스레드내 랜더링과 관련된 연산 부하가 감소됨에 따라 클라이언트의 평균 FPS가 향상됩니다.로드 스레드가 개선됩니다.메인 스레드나 렌더 스레드의 요구에 따라 지정된 파일을 로딩하여 메모리에 탑재하는 역할을 담당하는 스레드입니다.
참고로 이미 기존 던전앤파이터 클라이언트에서도 로드 스레드를 이용하여 파일 로딩을 수행하고 있었으나 좋지 않은 구조로 인해 메인 스레드의 병목을 유발시키는 형태로 구성되어있어 이를 개선하였습니다.
또한 새로운 로드 스레드 구조는 코어 개수에 비례하여, 동적으로 스레드 개수로 조절할 수 있도록 보완되었습니다. - 기대 효과 : 게임 플레이 도중 동적으로 생성/소환되는 몬스터나 이펙트 등에 의해 발생하는 일시적인 클라이언트 병목 현상이 일부 완화됩니다.키 명령어 입력 감지(기록) 스레드가 추가됩니다.플레이어의 입력을 받아들여 이를 기록하는 역할을 담당하는 스레드입니다. 메인 스레드는 로직 연산에 앞서 키 명령어 입력 감지 스레드를 통해 기록된 유저의 입력을 전달받아 명령을 수행하게 됩니다.
참고로 기존 클라이언트에서는 메인 스레드에서 유저의 입력을 받아들이고 해석하는 일련의 과정을 모두 수행했기에 과도한 연산이나 랜더링이 이뤄지는 상황에서 메인 스레드에 병목현상이 발생하는 경우 간헐적으로 유저의 입력을 받아들일 수 없는 문제가 발생할 수 있었습니다. - 기대 효과 : 메인 스레드의 심각한 병목 상황에서 플레이어의 입력이 누락되는 문제가 일부 개선됩니다.네트워크 스레드가 추가됩니다.파티 플레이 전투를 위해 필요한 동기화 과정인 패킷 송/수신 과정을 메인 스레드에서 분리하여 별도의 스레드를 통해 처리되도록 구조를 개선하였습니다. - 기대 효과 : 다량의 패킷을 송/수신하는 과정에서 발생하는 일시적인 병목 현상이 일부 완화됩니다.
ㅇㅇ
뭐 어쩌라고
ㅋㅋ
ㅇㅇ - dc App
ㅗㅜㅑ 대박이네요
렉이 많이 줄었음 ㅋㅋ
완전한 멀티 코어 지원을 위하여!
오! 섹스
다 개선되네
ㄹㅇ알바새끼네이건
렉 ㅈㄴ줄었더라 - dc App
이걸 2022년 6월 돼서야 하는 미친 구시대 똥겜이 있네 ㅋㅋ 라고 비꼬는거다 게이야
그런거였노 - dc App
갓겜 ㅋㅋㅋㅋㅋㅋㅋ 역시 빛띵진 믿고잇엇다고 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
어제 된건데 왜 이제 올라옴
렉 없던데 있는애는 뭐야 - dc App
목욜 패치된거 왜 이제서야 념글임?
이거 패치하고 나처럼 로딩화면 넘어갈때 조금 멈추는애는 없냐?
나도
스2도 싱글코어야 - dc App
오래되고 스파게티 코드 가득한 게임을 저렇게 만든거보면 네오플애들 진짜 대단하네 블리자드도 스타2도 고치려다가 정말 일부만 수정하고 포기했는데
걍 존나 쉬는시간없이 루프를 돌게 해놔서 그럼 ㅋㅋ
루프 끝에 좀 쉬어도 되는데 그런거 없이 해놓으니 cpu 점유율이 날뛰고 온도가 존나 높아지는거