Skip to content

Instantly share code, notes, and snippets.

@EvilBeaver
Created February 24, 2021 19:43
Show Gist options
  • Save EvilBeaver/11c252f13199afca45c350442bd6dcfb to your computer and use it in GitHub Desktop.
Save EvilBeaver/11c252f13199afca45c350442bd6dcfb to your computer and use it in GitHub Desktop.
Тесты производительности Решето Эратосфена
Н = 50000000;
Массив = Новый Массив();
Массив.Добавить(Ложь);
Массив.Добавить(Ложь);
Для индекс = 2 По Н Цикл
Массив.Добавить(Истина);
КонецЦикла;
времяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
Для индекс = 2 По Н Цикл
Если Массив[индекс] Тогда
квадрат = индекс * индекс;
Если квадрат <= Н Тогда
м = квадрат;
Пока м <= Н Цикл
Массив[м] = Ложь;
м = м + индекс;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
времяОкончания = ТекущаяУниверсальнаяДатаВМиллисекундах();
Сообщить("" + (времяОкончания - времяНачала)/1000);
метод Скрипт()
знч Н = 5000000
пер Массив = новый Массив()
Массив.Добавить(Ложь)
Массив.Добавить(Ложь)
для индекс = 2 по Н
Массив.Добавить(Истина)
;
знч времяНачала = ДатаВремя.Сейчас()
для индекс = 2 по Н
если Массив[индекс]
пер квадрат = индекс*индекс
если квадрат <= Н
пер м = квадрат
пока м <= Н
Массив[м] = Ложь
м += индекс
;
;
;
;
знч времяОкончания = ДатаВремя.Сейчас()
знч мсЦикла = (времяОкончания - времяНачала).ВМиллисекундах()
Консоль.Записать("" + (мсЦикла/1000))
;
@kuntashov
Copy link

Консоль.Записать("" + (мсЦикла/1000))

Консоль.Записать("%{ мсЦикла/1000 }")

А если по теме, то меня пока больше всего смущает медленный старт скрипта до момента, пока он делом начнет заниматься. Если исходить из концепции, что 1С:Исполнитель - для скриптинга, то есть для написания относительно небольших быстрых скриптов, очевидно ожидать, что время "на разгон" должно быть ничтожно мало по сравнению со временем выполнения самого скрипта, а сейчас получается чуть ли не обратное:

2021-02-25_15-42

("Инициализация" на скриншоте - это время заполнения массива).

Для сравнения время бутстрапа односкрипта - 0.06s на той же машине (при этом он многобукв выводит), у php 0.04, бутстрап python'а и perl'а ничтожно мал и time его не может уже посчитать.

2021-02-25_15-55

@perfolenta
Copy link

В первом файле указано 50 млн циклов, а во втором только 5... народ не глядя запускает и удивляется, почему Исполнитель работает быстрее Односкрипта... :)

@sikuda
Copy link

sikuda commented Aug 20, 2024

И через три года:
1С 8.3.12 - 382 сек.
1С 8.3.22 - 518 сек
1С 8.3.25 - 523 сек
1С Executer 2020.2.5-23 U(JVM 17) - 50 сек
OneScript - 50 сек
1С Executer 5.2 U(JVM 17) - 28 сек
Аналогично Apple, замедляем предыдущие версии чтобы новые казались скоростными? (Ниже ответ Сергея - отладка в 1С становится все удобнее)
https://mista.ru/topic/895098

@EvilBeaver
Copy link
Author

Исполнитель действительно сильно оптимизировали по производительности, я не замерял, но по ощущениям - должен прям шустро начать работать

@perfolenta
Copy link

perfolenta commented Aug 22, 2024

должен прям шустро начать работать

речь об ещё не опубликованном идет?
только что скачал последний релиз исполнителя версии 5_2_6_3 и проверил... похоже не сильно ускорился...
на моём ноутбуке результаты такие получились:
-Исполнитель 5.2:
Время, с: 30.352
Время, с: 136.717
-OneScript 1.9
Время, с: 37.885
Время, с: 106.363
первое число это заполнение массива, а второе расчет эратосфена...
т.е. в заполнении массива Исполнитель выиграл у ОСкрипта, а в расчете проиграл...
кстати, о массивах... тот скрипт для Исполнителя, который в шапке - устарел, т.к. теперь массиву надо указать хранящийся в нём тип... возможно поэтому исполнитель и выиграл у ОСкрипта заполнение массива, что массив типизированный...
СЮРПРИЗ! (возможно только для меня :) )
пока писал этот текст, пришло в голову, что Исполнители X и U могут наверное с разной скоростью работать... так и оказалось...
выше был результат Исполнителя X, а Исполнитель U той же версии показал такие результаты:
Время, с: 13.297
Время, с: 60.211
т.е. шустре в 2 раза, даже чуть больше!
Но Абсолютным победителем стала JAVA 11, которая с массивом типа ArrayList показала:
4169 мс
15919 мс
а с массивом типа boolean[] показала рекордные:
59 мс
453 мс !!!!
Для сравнения C# с массивом типа List дал:
187,2646 мс
609,3799 мс
а с массивом типа bool[] смог вытянуть:
62,3883 мс
500,0454 мс
немного уступив джаве....
ну и горькая пилюля - лучший из интерпретаторов проиграл компиляторам более, чем в 100 раз... :(
так что лучшим решением можно признать симбиоз интерпретаторов и компиляторов, где каждый делает то, что у него лучше получается...

@perfolenta
Copy link

кстати, хоть я и стесняюсь, но все же похвастаюсь.... моя Перфолента проиграла и Джаве и Шарпу в расчете Эратосфена, но зато стабильно выигрывает у них в заполнении массива! Типичный результат:
47 мс
640 мс
есть еще над чем работать :)
В общем, всем нам удачи и успехов в развитии своих поделок!!!

@tormozit
Copy link

tormozit commented Aug 22, 2024

Мои замеры.
Сделал свой вариант теста на 10 млн и с ускоренным заполнением массива, чтобы меньше ждать https://paste1c.ru/2ezdv7s3tvqe
Oscript - 8 сек в консольном запуске (значение переменой _РежимОтладки не дает заметного влияния)
1С 8.3.25 - 80 сек в оригинальном варианте (_РежимОтладки = Истина, отладчик подключен)
1С 8.3.25 - 8 сек в однострочном варианте (_РежимОтладки = Ложь) https://infostart.ru/1c/articles/1732527/
В комментариях к статье я уже делал похожий тест, но лишь в пределах платформы 1С https://forum.infostart.ru/forum9/topic287808/#message2881082

1С:Исполнитель без отладки решает тот же тест за 6.5 секунд https://paste1c.ru/40fnsi34oy2o , т.е. на 20% быстрее чем интерпретаторы встроенного языка. Тут строгая типизация ожидаемо дает свои плоды.
А с отладкой он решает уже за 12 секунд, т.е. замедление всего в 2 раза.

@tormozit
Copy link

tormozit commented Aug 22, 2024

Выводы

  1. Надо тщательнее "мыть руки" при замере выполнения кода 1С. Про виды загрязнения я очень подробно и наглядно рассказал в статье про однострочный код.
  2. Интерпретатор 8.3.25 без механизма отладки по сравнению со старыми версиями не замедлился и даже немного ускорился (по сравнению с 8.2 точно).
  3. А вот механизм отладки 8.3.25 потяжелел и его накладные расходы при выполнении строки кода (опкода новой строки) стали немного больше чем были в 8.2
  4. Заметной разницы в скорости работы интерпретаторов 1С и Оскрипт с запрещенной отладкой или в однострочном режиме нет!

@EvilBeaver
Copy link
Author

Заметной разницы в скорости работы интерпретаторов 1С и Оскрипт с запрещенной отладкой или в однострочном режиме нет!

Но пишем код мы обычно не в одну строчку.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment