Skif писал(а):ВЕСЬ скрипт моего экспериментального ТУ7А, включая всю логику электросхемы, тормозов, дизеля с системой охлаждения и хождением по локомотиву (!) не вызывает просадки даже на 1 кадр. А в нем несколько тысяч строк, при сотне контролов у локомотива (96, если быть точным).
Спору нет, конечно же, чтобы так повесить игру, надо хорошо постараться. Но цель моего пруфа - показать, что не стоит пренебрегать ресурсоемкостью скриптов и ничего смешного в этом нет. Если скрипт, допустим вагона, расходует 1 лишнюю мкс, то на 100 вагонах (что вполне нормально для среднего сценария) это уже 0,1 мс - лишняя, что очень много. А грамотно спроектированный скрипт даже 1 кадр не съест, если в нем нет сложных расчетов.
Какое значение имеет количество строк? В приведенном в пруфе скрипте более 2000 строк, но игру повесила 1 функция в 10 строк. Аналогично и количество контролов. Какое значение имеет их количество?
Skif писал(а):Все эти подсчеты не имеют смысла, так как Windows работает фактически через виртуальную машину, и выполняет инструкции в асинхронном режиме. Т.е. частота выполнения инструкций не соответствует частоте ЦП.
Что значит "через виртуальную машину"? Ну вот, например, есть камера на 12 МР. Если добавить ещё 10 процессоров, сможем ли мы получить картинку в качестве выше 12 МР? Нет, говорю я Вам, потому что законы физики не переступить. И можно сделать хоть 1000 виртуальных процессоров, можно хоть наизнанку вывернуться, но НИКОГДА 1 процессор с 1 АЛУ не сделает 2 логические операции одновременно. Если говорить о 2-ядерном процессоре, то он НИКОГДА не будет работать быстрее в 2 раза по сравнению с одноядерным при той же тактовой частоте, так как будет отвлекаться на синхронизацию. Поэтому, как бы Windows не работала, но если ЦП имеет 1 АЛУ, то ну никак не получится выдавить из него количество элементарных операций, большее чем тактовая частота. "частота выполнения инструкций не соответствует частоте ЦП" - естественно, она может быть только ниже для 1 ядра. Даже 1:1 не будет, разве что в теории. Для 2 и больше ядер - да, может. Именно поэтому я и пишу, что добиться большей производительности можно только повышая частоту или умножая количество
физических ядер.
А само определение "виртуальная машина" свидетельствует о том, что физически её нет, а значит, все процессы, которые она якобы выполняет, реально происходят в АЛУ ЦП, отнимая у него время. Для меня это все равно, что взять полноприводный автомобиль и рассчитывать, что если двигатель имеет мощность в 200 кВт, то вместе это будет 800 кВт, потому что 4 колеса. Да, полный привод повышает проходимость. Может что-то ещё, не знаю. Но мощности он не добавит. Наоборот, на то, чтобы крутить все валы, надо потратить дополнительные усилия, и в общем смысле КПД полноприводного автомобиля будет ниже.
Skif писал(а):А скрипты в TS и вовсе выполняются с частотой кадров сцены, если брать за основу функцию Update.
НИКОГДА я с этим не соглашусь. Это функция
Update выполнится с частотой кадров сцены. А если я из неё сделаю отправку сообщения на другую единицу ПС, то выполнится уже 2 функции за кадр -
Update и
ОnConsistMessage всех вагонов, входящих в состав. Если же они по этому сообщению дадут ответ, то суммарно для моего ПС за 1 кадр отработает 1 раз функция
Update и столько раз, сколько в составе вагонов,
ОnConsistMessage (если сделать ограничение, а иначе будет вообще цепная реакция). Именно из-за этого некоторые дефолтные ПС вызывают лаги - потому что их рассылка не оптимизирована и имеет лавинный эффект.
Skif писал(а):Касаемо сложности скриптов: скрипты, описывающие поведение монстров в Serious Sam или DOOM4, на порядок сложнее всего того, что мы пишем для локомотивов.
Повторюсь, вопрос не в сложности скрипта. А в оптимальности его работы. И в количестве его копий, работающих одновременно. Я могу сделать скрипт в 20000 строк, который будет незаметен для игры. А могу сделать в 10 строк и запросто повесить достаточно сильный ПК.