• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Скорость разных языков программирования

  • Автор темы Olej
  • Дата начала
O

Olej

Одна и та же программа, записанная на разных языках программирования, будет выполняться с очень различающейся скоростью.

Одни языки программирования компилируются в нативный машинный код и будут очень быстрыми (C, C++, Go, ...).
Другие языки компилируются в промежуточный байт-код, который затем интерпретируется при выполнении (Java, Python, ...).
Третьи языки непосредственно интерпретируются из исходного кода (JS, PHP, Lua, ...).
Скорости выполнения программ на них будет сильно различаться.
Насколько сильно?
 
  • Нравится
Реакции: Runinterface
O

Olej

Скорости выполнения программ на них будет сильно различаться.
Насколько сильно?
Я когда-то проводил такое сравнение, и даже написал на этот счёт обстоятельную статью...
Вот она (нашёл): (это достаточно черновая версия, но понятно).
Там же - архив тестовых примеров для повторения и проверки.

Для кой-кого может оказаться изрядной неожиданностью, что один и тот же алгоритм, записанный на разных языках программирования, может выполняться с различием по скорости ... до 200-500 раз, а то и более. :eek:

После этого задумаешься при случае, на каком же языке программирования записывать программу. :oops:
 
Последнее редактирование модератором:
O

Olej

(это достаточно черновая версия, но понятно).
Вспомнил...
Есть более внятная для чтения версия этого материала, подготовленная для IBM DeveloperWorks (русскоязычного отделения IBM).
Вот:

 
Последнее редактирование модератором:

Kmet

Well-known member
25.05.2006
904
8
BIT
0
Тут меряется не производительность языка, а время старта vm или интерпретатора.
Написание бенчмарков non penis canis est
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
Ну для нативных языков меряется время создания процесса, что тоже не самая дешевая операция.
Вы меряете время старта для нативных и интерпретируемых языков и ВНЕЗАПНО обнаруживаете, что для нативных это самое время меньше. Ну ок, это и без тестов понятно и никому не интересно.

К производительности ваши тесты не имеют никакого отношения.
 
O

Olej

Вы меряете время старта для нативных и интерпретируемых языков
Когда запущенное приложение работает (в цикле, в рекурсии) 5 минут, эти 5 минут запускается интерпретатор? или 5 минут стартует "создание процесса"?
Очнитесь...
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
какие пять минут???
у вас в тестах секунды в лучшем случае. или чукча не читатель.

вы бы хоть нормировали на время запуска пустого приложения.
 
O

Olej

у вас в тестах секунды в лучшем случае.
1. Там тест специально очень высокой скорости роста O(N), так что я наблюдал и минуты ... и вы можете
2. Но если даже и секунды ... то сколько вам секунд нужно на запуск интерпретатора JS на процессоре i7 ?
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
Экспоненциальная сложность у этой реализации финобачи.
Я не знаю, что вы наблюдали. Это и так очевидно, что чем длительнее тест, тем меньше влияние переходных процессов.
Мы тут обсуждаем опубликованный вариант.

Я хз как с js.
А вот серверный хотспот у меня стартует где-то за 0m0.066s, что вполне сравнимо с вашим результатом для java и scala.
Т.е. как минимум для двух языков установочные процессы оказывают значимое влияние на результаты.

А еще можно вспомнить, что JIT надо прогревать....
 
Последнее редактирование:
O

Olej

Мы тут обсуждаем опубликованный вариан
Не вводите просматривающих форум в заблуждение.

Вот выполнение тестовой задачи на Python (это другой процессор, но те же соизмеримые приведенным времена):
Код:
[olej@dell speed]$ time nice -9 python fibo.py 36
24157817
real    0m12.193s
user    0m12.127s
sys    0m0.006s
А вот запуск "пустого" приложения Python:
Код:
[olej@dell speed]$ time nice -9 ./null.py

real    0m0.022s
user    0m0.017s
sys     0m0.005s
Сколько там % (вашей правоты)???
0.14% !
И, обратите внимание, что sys время примерно одинаково - это и есть (очень грубо) запуск интерпретатора Python, а время user - выполнение пользовательского кода - различаются в 713 раз, 3 порядка!
 
O

Olej

Тут меряется не производительность языка, а время старта vm или интерпретатора.
Но за подсказку спасибо: во всех последующих обсуждениях в разных местах я буду обязательно упоминать такую аргументацию, чтобы тут же показывать что это не так. ;)
 
O

Olej

А вот серверный хотспот у меня стартует где-то за 0m0.066s, что вполне сравнимо с вашим результатом для java и scala.
OK, Java:
Код:
[olej@dell speed]$ java -version
openjdk version "1.8.0_111"
OpenJDK Runtime Environment (build 1.8.0_111-b16)
OpenJDK 64-Bit Server VM (build 25.111-b16, mixed mode)
(я специально на этом процессоре подбираю время выполнения того же порядка, что и в обзоре)
Код:
[olej@dell speed]$ time nice -9 java fibo 41
267914296

real    0m1.510s
user    0m1.495s
sys    0m0.021s

[olej@dell speed]$ time nice -9 java nill

real    0m0.098s
user    0m0.081s
sys    0m0.025s
Даже здесь 18.5 раз ... 5% - что вполне можно пренебречь.
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
Не вводите просматривающих форум в заблуждение.
Я ничего не знаю про ваши фантазии. Я комментирую бенчмарк опубликованный на developerworks.

Ввести в заблуждение тут пытаетесь только вы. Почему финобачи от 36, а не как в остальных тестах от 30? Числа не такие красивые получаются? Раз в 16 отличаются?

Если делать честно, то получаем, что для питона влияние установочных процессов вполне значимые 3%-4%.
A для jvm влияние этих самых установочных процессов (для финобачи от 30) 30%-50%

У вас бенчмарке бегает неучтенный фактор, который варьируется на порядки от теста к тесту. Бенчмарк кривой, ничего личного.

[olej@dell speed]$ time nice -9 java fibo 41
Даже здесь 18.5 раз ... 5% - что вполне можно пренебречь.
А вы для 30 посчитайте, как в обзоре. Больше 50% получилось? =)
 
Последнее редактирование:
O

Olej

Ввести в заблуждение тут пытаетесь только вы. Почему финобачи от 36, а не как в остальных тестах от 30? Числа не такие красивые получаются? Раз в 16 отличаются?

Если делать честно, то получаем, что для питона влияние установочных процессов вполне значимые 3%-4%.
A для jvm влияние этих самых установочных процессов (для финобачи от 30) 30%-50%

Ну, "финобачи" - это что-то из ваших ночных детских страхов, застрявших в подсознании.
А мы считаем общеизвестные из математики числа Фибоначчи.
Ну да ладно с этим...

А почему "36 а не 30"?
Элементарно, Ватсон! :D
Я просто подобрал те значения аргумента вычисляемой функции, которые на другом процессоре даёт цифры, очень совпадающие с теми, что показаны в первоначальном тексте начала 2014 года.

А 3-4% ... да даже 30-50% (только где вы их нагребёте? :confused:) - это величины, которыми можно запросто пренебрегать, когда идёт грубое сравнение порядков величин.
(а замер временных интервалов в программном коде и нельзя делать точнее, чем оценка порядков ... иначе это будет заведомо ложная интерпретация ... что относится, кстати, и к любым профилировщикам)
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
Ну, "финобачи" - это что-то из ваших ночных детских страхов, застрявших в подсознании.
А мы считаем общеизвестные из математики числа Фибоначчи.
Ну да ладно с этим...
да я у же в курсе, что вы отсутствии аргументов, цепляетесь за граматику

А почему "36 а не 30"?
Элементарно, Ватсон! :D
Я просто подобрал те значения аргумента вычисляемой функции, которые на другом процессоре даёт цифры, очень совпадающие с теми, что показаны в первоначальном тексте начала 2014 года.

А смысл? Оригинальный бенчмарк менее кривым не стал. Не ну я понимаю, это что бы числа в посте красивее были. =)

А 3-4% ... да даже 30-50% (только где вы их нагребёте? :confused:) - это величины, которыми можно запросто пренебрегать, когда идёт грубое сравнение порядков величин.

Ага особенно, когда этих пренебрегаемых величин набирается на десятки процентов и мы делаем грубое сравнение порядков не тех величин, которые хотели.

а замер временных интервалов в программном коде и нельзя делать точнее, чем оценка порядков ... иначе это будет заведомо ложная интерпретация
Да вы просто готовить не умеете. Бенчмарки писать сложно, но можно.
 
O

Olej

да я у же в курсе, что вы отсутствии аргументов, цепляетесь за граматику
Это не грамматика.
Это элементарная математика, курс средней школы.

Хотя и с грамматикой следует дружить ... человек, не научившийся грамотно говорить и писать - не заслуживает уважения. :D
 
O

Olej

Ага особенно, когда этих пренебрегаемых величин набирается на десятки процентов и мы делаем грубое сравнение порядков не тех величин, которые хотели.
Всё.
Хватит продолжать вот это бла-бла-бла ... пустое блеяние.

Умеете писать классные бэнчмарки - напишите и покажите.
Всё же элементарно, Ватсон! ;)

(«я сделал всё, что мог, кто может, пусть сделает лучше»)

Слышали такое?
(>2000 лет назад сказано)
 
Последнее редактирование модератором:
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!