Комментарии 9
У Python есть какая-то магия?
И не одна.
Лет X назад писал то, что потом было обнаружено как rpmreaper/deborphan - выявление пакетов-leaves. Макет на питоне, "прод" на C.
Внезапно код на C оказался в разы медленнее (понятно, что спец-средств не применялось, stdlib only).
Трассировка показала, что поиск в строках в питоне значительно быстрее, а перераспределение памяти в разы быстрее. Это если не выпендриваться.
Как так - не знаю, но fuckт имел место быть.
ucode это микрокод. Первая буква мю, а не у
Я сталкивался с подобной магией, когда экспериментировал с Cython. На самом деле, если глубоко не вникать в код, память и т.д., то очень часто переписать на C это хуже. Не поймите неправильно, сам по себе C быстрее Python. Проблема в разработчиках и накладных расходах на разработку.
Поэтому надо быть крайне осторожным при реализации части функциональности на более быстрых языках, проводя тестирование на разных архитектурах, процессорах (с разными кешами и наборами инструкций), разной памятью и версиями ядер, набора библиотек и т.д.
Но у нас как обычно: "давайте перепишем на язык X и сразу ускоримся в N раз!" Кекас два. Потом запускаются в облаке, на каком-то старом Linux ядре 4.4, дешёвых энергоэффективных процессорах и скорость просто пополам ниже.
Недавно столкнулся с похожей ситуацией. Есть очень простой тест скорости доступа до эндпойнта на Ruby: 5000 раз сделать REST-запрос и распарсить полученный JSON. Из любопытства переписал тест на C++, и вопреки ожиданиям среднее время доступа увеличилось процентов на 5. Проверял на домашнем десктопе (Ryzen 5) и облачных виртуалках. Пробовал разные библиотеки для работы с JSON в C++, но замедление сохранялось. В причинах разбираться не стал, поскольку не обладаю необходимой квалификацией.
А вот кстати говоря:
Benchmark 1: python-fs-read/test.py
Time (mean ± σ): 15.9 ms ± 0.7 ms [User: 5.6 ms, System: 10.1 ms]
Benchmark 2: python-opendal-read/test.py
Time (mean ± σ): 32.9 ms ± 1.3 ms [User: 6.1 ms, System: 26.6 ms]
Нельзя ли было какой-то вывод сделать уже на этом этапе?
Это просто великолепно. Читаешь как некий детектив, при этом финал неожиданный. Спасибо большое за эту статью.
std fs в Rust медленнее, чем Python? Нет, это аппаратный баг