Скорость Google Go
2011-09-06 08:02 pmВ июне исследователи из Гугла опубликовали статью [1], где они сравнивнивают производительность индустриальных языков программирования C++ и Java/Scala с Go. Программа на Гоу была в 7 раз медленнее, чем программа на C++, после применения экстремальных мер по оптимизации к последней.
Если C++ный код не подвергается экстремальной оптимизации, разница не так велика - порядка 2x-4x раз [2].
Статью [1] писала не та команда, которая разрабатывает компилятор для Гоу. У Роба Пайка и компании возникли возражения по этим цифрам, и путём некоторой оптимизации Go-исходников теста с использованием профилировщика, они смогли сравниться с C++ [3]
Также, Russ Cox отмечает:
"We used gopprof to study an inefficient Go program and then to improve its performance by an order of magnitude and to reduce its memory usage by a factor of six. A subsequent comparison with an equivalently optimized C++ program shows that Go can be competitive with C++ when programmers are careful about how much garbage is generated by inner loops."
Таким образом, бенчмарки показывают, что язык Go упёрся в принципиальный дефект своего дизайна - в сборку мусора по принципу stop-the-world. Обычная программа на Go (без экстремальных мер по оптимизации) больше тратит времени на сборку мусора, чем собственно на вычисления.
[1] https://days2011.scala-lang.org/sites/days2011/files/ws3-1-Hundt.pdf
[2] http://shootout.alioth.debian.org/u64q/which-programming-languages-are-fastest.php
http://shootout.alioth.debian.org/u32/which-programming-languages-are-fastest.php
[3] http://www.theregister.co.uk/2011/07/01/go_v_cpluplus_redux/
Ссылка [2] также интересна тем, что она показывает, как отстали Python, Ruby и PHP. Статически типизированные языки безусловно рвут динамически типизированные, они быстрее в десятки раз.
Если C++ный код не подвергается экстремальной оптимизации, разница не так велика - порядка 2x-4x раз [2].
Статью [1] писала не та команда, которая разрабатывает компилятор для Гоу. У Роба Пайка и компании возникли возражения по этим цифрам, и путём некоторой оптимизации Go-исходников теста с использованием профилировщика, они смогли сравниться с C++ [3]
Также, Russ Cox отмечает:
"We used gopprof to study an inefficient Go program and then to improve its performance by an order of magnitude and to reduce its memory usage by a factor of six. A subsequent comparison with an equivalently optimized C++ program shows that Go can be competitive with C++ when programmers are careful about how much garbage is generated by inner loops."
Таким образом, бенчмарки показывают, что язык Go упёрся в принципиальный дефект своего дизайна - в сборку мусора по принципу stop-the-world. Обычная программа на Go (без экстремальных мер по оптимизации) больше тратит времени на сборку мусора, чем собственно на вычисления.
[1] https://days2011.scala-lang.org/sites/days2011/files/ws3-1-Hundt.pdf
[2] http://shootout.alioth.debian.org/u64q/which-programming-languages-are-fastest.php
http://shootout.alioth.debian.org/u32/which-programming-languages-are-fastest.php
[3] http://www.theregister.co.uk/2011/07/01/go_v_cpluplus_redux/
Ссылка [2] также интересна тем, что она показывает, как отстали Python, Ruby и PHP. Статически типизированные языки безусловно рвут динамически типизированные, они быстрее в десятки раз.