Якщо ви працюєте в реально критичних для продуктивності областях, тоді ви не можете відмовитись від ефективності як заздалегідь. Це одна з найважливіших речей, над якою слід замислюватися при розробці проектів на ранніх етапах та способами, що стосуються ремонтопридатності кінцевого результату.
Ви не можете розробити та впровадити широкомасштабний сервер і просто почати писати простий, добре задокументований код, який просто використовує функції блокування для всього із глобальним блокуванням потоку, який блокує всю систему для обробки кожного окремого запиту клієнта, не ставлячи жодного думка про те, що стосується загального стану, суперечки ниток та асинхронності. Такий рецепт катастрофи та необхідність переробити та переписати основну частину прекрасно задокументованого коду, який ви написали таким чином, що може призвести до найскладнішого у підтримці кодової бази, яку можна уявити, переслідуючи умови гонки та тупики в результаті спроб щоб досягти необхідної ефективності заднім числом, а не думати про ефективні, прості та робочі конструкції вперед.
Команда з розробки ігор протягом 8 місяців випускає з двигуном, який працює лише на 2 кадри в секунду на їхньому найлюбшішому обладнанні з 32 ядрами, в той час як має тенденцію затримуватися протягом 15 секунд кожного разу, коли екран зайнятий, навряд чи миттєво отримає корисний продукт просто фіксація однієї маленької локалізованої точки доступу. Цілком ймовірно, що їх дизайн FUBAR таким чином, що гарантує епічний перегляд дошки для малювання та зміни дизайну, які можуть каскадувати в кожному куті бази коду.
З Джоном Кармаком він раз поговорив про те, як технологічна демонстрація повинна працювати як мінімум сотнями тисяч кадрів в секунду, щоб інтегрувати її у виробництво. Це не нездорова одержимість працездатністю. Він заздалегідь знає, що ігри потрібно запускати в цілому зі швидкістю 30 FPS, щоб клієнти вважали це прийнятним. Як результат, такий маленький аспект, як система м'якої тіні, не може працювати на 30 FPS, інакше гра в цілому не може бути достатньо швидкою, щоб забезпечити необхідний зворотний зв'язок у реальному часі. Це непридатно, поки не досягнуть необхідної ефективності. У таких критично важливих для ефективності сферах, де є основна вимога до ефективності, рішення, яке не може досягти достатньої швидкості, насправді не краще, ніж таке, яке взагалі не працює,. І ви не можете спроектувати ефективну систему м'яких тіней, яка працює з сотнями тисяч кадрів в секунду, як це потрібно для ігрового двигуна в реальному часі, якщо ви не заздалегідь поставите переважну кількість думок щодо її ефективності. Насправді в таких випадках 90 +% роботи орієнтоване на ефективність, оскільки тривіально розробити систему м'якої тіні, яка працює чудово за 2 години на кадр, використовуючи трасування тракту, але ви не можете розраховувати на її налаштування. працювати з сотнями кадрів в секунду без абсолютно різної зміни підходу.
Коли ефективність є основоположною частиною дизайну програми, ви не можете розраховувати на досягнення ефективності заднім числом, не втрачаючи значно більше часу, ніж ви заощадили, ігноруючи його, оскільки ви не можете розраховувати на досягнення робочого дизайну заднім числом. Ніхто не каже: " Не можу відкласти думки про дизайн на пізніше. Просто добре задокументуйте свій код, і ви можете придумати належний дизайн пізніше ". Але в критичних для продуктивності архітектурах це те, що ви робите ефективно, якщо не докладати великої обережності та продуманості ефективних проектів наперед.
Тепер це не означає, що вам доведеться мікронастроювати свої реалізації відразу ж. Щодо деталей щодо реалізації, після вимірювання є багато місця для переходу до більш швидких рішень за умови, що дизайн не потрібно буде змінювати, і часто це найпродуктивніший спосіб зробити це. Але на рівні дизайну це означає, що ви повинні задуматися над тим, як дизайн та архітектура будуть ставитись до ефективності з самого початку.
Ключова відмінність тут - дизайн. Непросто зробити великі зміни в дизайні заднім числом, оскільки конструкції накопичують залежності, і залежність порушиться, якщо дизайн зміниться. І якщо дизайн має вимогу бути достатньо ефективним або, в деяких випадках, його якість значною мірою вимірюється його ефективністю, то не слід сподіватися, що зможете досягти належного дизайну як задум. З будь-якими конкурентними продуктами, де ефективність - це величезний аспект якості, будь то операційні системи, компілятори, відеопроцесори, променеві трекери або ігрові двигуни або фізичні двигуни, про ефективність та уявлення даних ретельно продумали з самого початку. І в цих випадках не передчасна оптимізація, щоб висувати так багато продуманої ефективності. Це було розміщення такої думки саме в найпродуктивніший час для цього,