실제로 성능이 중요한 영역에서 작업하는 경우 나중에 생각할 때 효율성을 떨어 뜨릴 수 없습니다. 이러한 경우 초기 설계시 최종 결과의 유지 관리 성과 관련하여 고려해야 할 가장 중요한 사항 중 하나입니다.
대규모 서버를 설계하고 구현할 수 없으며 전체 스레드 잠금 기능으로 모든 시스템에 대한 차단 기능을 사용하여 모든 개별 클라이언트 요청을 처리하지 않고 각 개별 클라이언트 요청을 처리하는 모든 기능에 대해 차단 기능을 사용하는 간단하고 문서화 된 코드 작성을 시작할 수 있습니다. 공유 상태, 스레드 경합 및 비동기성에 대해 생각했습니다. 이는 재난을위한 레시피이며, 시도한 결과 경쟁 조건과 교착 상태로 인해 상상하기 어려운 가장 유지 관리하기 어려운 코드베이스를 상상할 수있는 방식으로 작성한 훌륭한 문서화 코드를 다시 디자인하고 다시 작성해야합니다. 효율적이고 단순한 작업 설계를 미리 생각하는 것과는 반대로, 후시에서 필요한 효율성을 달성하기 위해.
게임 개발 팀은 32 개의 코어를 가진 가장 강력한 하드웨어에서 초당 2 프레임 만 사용하는 엔진을 사용하여 8 개월 동안 생산을 시작하면서 화면이 바쁠 때마다 15 초 동안 정지하는 경향이있어 사용 가능한 제품을 즉시 얻을 수는 없습니다 하나의 현지화 된 핫스팟을 고정합니다. 코드 보드의 구석 구석까지 계단식으로 진행될 수있는 드로잉 보드와 디자인 변경에 대한 서사시를 보장하는 방식으로 디자인이 FUBAR 일 수 있습니다.
John Carmack과 함께, 기술 데모를 프로덕션에 통합하기 위해 초당 최소 수백에서 수천 프레임으로 실행하는 방법에 대해 한 번 이야기했습니다. 그것은 효율성에 대한 건강에 해로운 집착이 아닙니다. 그는 고객이 게임을 수용 할 수 있도록 게임을 전체적으로 30+ FPS에서 실행해야한다는 것을 미리 알고 있습니다. 결과적으로 소프트 섀도우 시스템과 같은 하나의 작은 측면은 30 FPS에서 실행될 수 없으며, 그렇지 않으면 게임 전체가 필요한 실시간 피드백을 제공 할만큼 빠를 수 없습니다. 그것은이다 사용할 수 없게 은 필요한 효율을 달성 할 때까지. 효율성에 대한 기본 요구 사항이있는 성능이 중요한 영역에서 적절한 속도를 달성하지 못하는 솔루션은 실제로 전혀 작동하지 않는 솔루션보다 낫지 않습니다.. 그리고 효율성에 대해 많은 관심을 가지지 않으면 실시간 게임 엔진에 필요한 초당 초당 수백에서 수천 프레임으로 실행되는 효율적인 소프트 섀도우 시스템을 설계 할 수 없습니다. 실제로, 이러한 경우, 경로 추적을 사용하여 프레임 당 2 시간 동안 만 잘 작동하는 부드러운 그림자 시스템을 만들어내는 것이 쉽지 않기 때문에 작업의 90 + % 이상이 효율성을 지향합니다. 그러나 조정할 수는 없습니다 완전히 다른 접근 방식을 변경하지 않고 초당 수백 프레임으로 실행합니다.
효율성이 응용 프로그램 설계의 기본 요소 인 경우, 무시 후 작업 설계를 달성 할 수 없기 때문에 무시함으로써 절약 한 시간보다 훨씬 더 많은 시간을 잃지 않으면 서 후시의 효율성을 달성 할 수 없습니다. " 나중에 디자인에 대해 생각하지 않아도 괜찮습니다. 코드를 잘 문서화하면 나중에 적절한 디자인을 만들 수 있습니다 ." 그러나 성능이 중요한 아키텍처에서는 효율적인 디자인에 많은주의와 생각을하지 않으면 효과적으로 수행 할 수 있습니다.
그렇다고해서 바로 구현을 마이크로 튜닝해야한다는 의미는 아닙니다. 구현 세부 사항을 위해, 설계를 변경할 필요가없고 측정을 수행 할 때 가장 생산적인 방법 인 경우 측정 후 더 빠른 솔루션으로 반복 할 여지가 많이 있습니다. 그러나 디자인 수준에서는 디자인과 아키텍처가 처음부터 효율성과 어떤 관계가 있는지에 대해 충분한 생각을해야합니다.
여기서 중요한 차이점은 디자인입니다.. 디자인이 종속성을 누적하여 디자인을 크게 변경하는 것은 쉽지 않으며 디자인이 변경되면 종속성이 손상됩니다. 그리고 디자인이 합리적으로 효율적이어야하거나 경우에 따라 품질이 효율성에 의해 크게 측정되어야하는 요구 사항이있는 경우, 사후에 적절한 디자인을 얻을 수있을 것으로 기 대해서는 안됩니다. 운영 체제 또는 컴파일러, 비디오 프로세서, 레이트 레이서, 게임 엔진 또는 물리 엔진 등 효율성이 품질의 큰 측면 인 경쟁 제품의 경우 효율성과 데이터 표현에 대한 생각은 처음부터 꼼꼼하게 생각되었습니다. 이러한 경우 효율성을 우선적으로 고려하는 것은 조기 최적화가 아닙니다. 그런 생각을 할 때 가장 생산적인 시간에 정확하게 생각해야했습니다.