TL; DR Сравнение Go и Python для времени выполнения кода, работа с изображениями Docker и распределением собственных пакетов.
Недавно я работал над программированием, и я подумал, что было бы интересно иметь реализацию как в Go, так и в Python.
Задача Состоит из обработки набора данных (в частности, CSV ~ 100 МБ), сделайте несколько агрегаций и выводит файл JSON, который будет использоваться в качестве источника данных для обслуживания ряда конечных точек API REST.
Что мы сравниваем?
Но достаточно с Chit-Chat, давайте копаем примерно сравнение.
Время исполнения : Разница во времени в скорости между двумя реализациями для выполнения алгоритма агрегации данных.
Docker Image : Сложность в создании изображения Docker и размера сгенерированных изображений.
Нативное распределение : Простота использования для установки и запуска приложения в собственной среде (он же на вашем ноутбуке).
Немного контекста
Оба приложения доступны на GitHub, Здесь версия GO и Здесь Python One.
В частности, мы будем сравнивать Plz Go v0.2.1 с Plz py v0.1.3
Версия Go и Python соответственно GO-1.13.8
и Python-3.8.5
Анкет
Обе реализация довольно мала:
- Пожалуйста, Go: 250 лок
- Plz py: 191 лок ( ~ 23% меньше)
Метрики, генерируемые с Tokei с использованием:
- для go
tokei -f -e = "*_ test.go
- для py
tokei -f
Обе реализации используют один и тот же идентичный последовательный алгоритм для обработки данных, и как вход, так и выходные данные одинаковы.
Средняя скорость 1 Для обработки входа CSV ~ 100 МБ на выходной сигнал 32K JSON:
Pzl Go: ~ 0,6 с (~ 2,2 раза быстрее) Plz py: ~ 1,3 с
Реализация алгоритма находится в массаж
Функция: Здесь, в V0.1.3 для Python и Здесь, в v0.2.1 для Go
Если вы копаете код и обнаружите некоторую очевидную проблему, влияющую на производительность, дайте мне знать в комментариях.
Здесь не так много, что в этом сценарии в два раза быстрее, чем Python.
Лучший : Идти
Поскольку приложение предоставляет API REST для обслуживания результатов агрегации, имеет смысл отправить приложение в качестве изображения Docker.
Подход к созданию изображения Docker состоит в том, чтобы использовать многоэтапную сборку: сначала построить приложение и собрать данные, а затем собрать изображение «производства».
Для этого критерия go – это лучшее, вы можете указать компилятору построить самоспоращенный двоичный файл, чтобы быть пакетом в царапать Изображение для Полученное изображение Размер чуть больше 9 МБ (сжатый 3,5 МБ).
С другой стороны, с Python, финал Изображение (на основе 3.8-Slim-Buster
)-это ошеломляющее 175 МБ (сжатый 55 МБ). Это связано со многими слоями, которые составляют 3.8-Slim-Buster
Таким образом, базовое изображение, существует место для улучшения путем создания пользовательского изображения, но это, вероятно, потребует значительных усилий для сборки и технического обслуживания.
Pzl Go: ~ 9,3 МБ – (18x меньше) plz py: ~ 175mb
Лучший : Идти
Под нативным распространением я хочу установить приложение на сервере или на ваш ноутбук, не применяя слишком много с требования к программному обеспечению Анкет Я твердо верю, что это важный показатель, поскольку наличие сложных процедур установки включает в себя много когнитивных усилий, которые в конечном итоге потрачены впустую.
В этой области и Go, и Python более или менее эквивалентны на поверхности, с Go вы можете установить пакет, работающий Получите github.com/noandrea/plz
и с питоном, использующим PIP установка PLZPY
Анкет
Предостережение заключается в том, что Python гораздо более популярен и по умолчанию по умолчанию по умолчанию, в то время как для Go вам, вероятно, придется загрузить и установить инструментарий GO.
Другое заметное отличие состоит в том, что с PIP установка
Вы устанавливаете «двоичное» распределение, находясь с иди возьми
Вы получаете исходный код и собираете его локально.
Стоит упомянуть, что сопровождающие (ы) пакета GO, возможно, отправили двоичные файлы для специфических архитектур и менеджеров пакетов ( Brew
, dnf
, apt
, …), но это требует дополнительной работы и обслуживания.
Немного лучше : Питон
Выводы
Я надеюсь, что вам понравилось это сравнение так же, как и я, и о том, какое лучшее, иди или питон, ответ … 🥁 … оба и ни один 😉!
👋
согласованно по нескольким выполнениям ↩
Оригинал: “https://dev.to/noandrea/go-vs-py-419o”