|
|||||||||||||||||||
|
|
||||||||||||||||||
Сравнивать всегда интересно и сложно одновременно - особенно в случае, когда сравниваемые системы выполняют одинаковые функции, но делают это по-разному. С повышением требований к масштабируемости (увеличение количества пользователей) и наращиванием логики приложения требования к языку программирования и среде выполнения существенно возрастают. К этому следует также прибавить, что относительно недавно веб-приложения перешли из мира интернет в мир корпоративных приложений. Это снова повысило требования к эффективности среды выполнения. В настоящие время для создания веб-приложений существует множество различных языков программирования. Самые популярные из них - php, perl, С# (dot.net), java2. Классическая технология asp становится историей, поскольку asp dot.net практически вытиснило эту технологию на windows-серверах в новых приложениях. Причиной появления этой статьи было желание получить представление об эффективности этих языков программирования относительно друг друга. Поискав немного, я не нашел на эту тему ничего интересного и решил самостоятельно написать небольшие тесты. Существует огромное количество тестов, сравнивающих производительность веб-приложений, реализованных с помощью asp dot.net с java2 технологий. Тесты эти достаточно сложны - как правило, это классическое "pet shop"-приложение (или его аналог), реализованное в двух вариантах. Соотношение производительности в этих случаях определяется как отношение времени реакции приложения на http-запрос при одинаковом числе запросов в секунду. Соотношение при стрессовой нагрузке при этом обычно составляет 2/3 в пользу dot.net. Прежде всего, это объясняется более эффективной реализацией dot.net-машины и очень тесной интеграцией с mssql-сервером. При этом такие приложения не отличаются большим количеством бизнес-логики. А вот сравнений с современными скриптовыми языками, такими как perl и php, я и вовсе не нашел. Для выяснения потенциала языков программирования было решено написать простые тесты в виде консольных приложений. Цель этого приложения - эмуляция большого количества бизнес логики, то есть циклов и условных переходов. Далее в тест была добавлена конкатенация строки, поскольку это одно из самых часто встречающихся операций в бизнес-логике веб-приложений. Тест является синтетическим, но я и не ставил себе целью получение реальной картины при работе среднего приложения. Целью, скорее, являлось получение некоторых экстремальных условий. Выводы делайте сами. Единственное, что можно сказать в утешение любителям скриптовых языков, это то, что взаимодействие с базами данных у них реализовано посредством native-драйверов, что в значительной степени увеличивает скорость работы в самом узком месте любого веб-приложения. Для себя же я сделал заключение, что не стану использовать их для создания чего-либо ответственного. Задача бизнес-логики теста - это нахождение первых ста простых чисел. (Напомню, что простое число - это такое число, которое может быть получено только умножением самого себя на единицу.) Естественно, если бы в реальном приложении стояла подобная задача, то целесообразнее было бы, найдя эти числа один раз, просто записать их виде массива из 100 чисел. К сожалению, в реальной жизни не все задачи можно решить предварительно. Результаты вывода программы перенаправлялись в текстовый файл, что позволило в значительной степени оптимизировать потери при выводе текста на консоль. Хотя программа выводит всего сто строк, разница получается достаточно ощутимая. Ниже приведен исходный код java-варианта приложения. Он достаточно прост и не нуждается в дополнительных пояснениях: import java.text.*; Если необходимо получить тест без конкатенации строки - просто закомментируйте строчку кода: // sb.append ("a"); Все остальные реализации теста на других языках программирования являются абсолютно идентичными. Результаты тестов на производительность приведены ниже. Платформа - linux redhat 9 (celeron 1700) под vmware. логика: 6 секунд; логика: 15 секунд; логика: 0,657 секунд; логика: 4 секунды; логика: 0,030 секунды; логика: 0,070 секунды; |
|||||||||||||||||||
|