waqur: (Default)
[personal profile] waqur
В июне исследователи из Гугла опубликовали статью [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. Статически типизированные языки безусловно рвут динамически типизированные, они быстрее в десятки раз.

Date: 2011-09-07 04:02 am (UTC)
From: [identity profile] cd-riper.livejournal.com
если говорить о работе с кучей vs сборка мусора, то в свое время я легко создавал код, который на плюсах работал значительно медленнее, чем код под .NET

Date: 2011-09-07 07:25 am (UTC)
From: [identity profile] waqur.livejournal.com
Ну, в гоу программист не решает, где размещать переменные - в стеке или в куче ; это делает компилятор in some obscure way.

Далее, в гоу нет стека как такового, ведь концепция линейного стека несовместима с сопроцедурами/гопроцедурами/гринлетами/ивэнтлетами/лёгкими_потоками/зелёными_потоками/как-они-там-ещё-называются. Зелёные потоки требуют древовидного стека (a la Cactus Stack), который всегда реализуется на куче; а стековые кадры вызывающей-вызываемой функции не находятся физически рядом (как в традиционной модели стека), а связаны указателями (как в классических структурах данных linked list / tree).

Поэтому, в конечном итоге, вся аллокация, в том числе и стековая, выполняется на куче.

Date: 2011-09-07 07:29 am (UTC)
From: [identity profile] cd-riper.livejournal.com
я понимаю, что речь идет не о стеке :)
фишка в том, что выделение памяти в системах с GC это O(1) операция, практически как получение памяти на стеке.
ну а сборку мусора всякими ловкими ходами, вроде поколений объектов, тоже довольно сильно ускоряют.
итого -- получается сильно быстрее в некоторых случаях обычной сишной кучи (понятно, что где надо, ты себе пулы сделаешь).

Date: 2011-09-07 07:42 am (UTC)
From: [identity profile] waqur.livejournal.com
им никто не мешал пулы сделать сразу

кто делает запросы к этой куче, кроме сгенерированного компилятором кода + вручную написанной библиотеки-аналога STL? они могли немного допилить все эти вещи, чтобы те радостно работали с объектами фиксированного размера, например 128 байт

и далее куча превращается в простой пул со всеми его преимуществами:
* нефрагментируемость
* быстрая аллокация на битовой карте свободных блоков + счётчиках единичных битов в иерархически организованных группах разного размера
* быстрое удаление
* можно в кольцевом буфере помнить с десяток последних освобожденных блоков и распределять их в приоритетном порядке для лучших показателей по кэш-попаданию


а для сишного кода, библиотек третьих фирм и т.д. можно было оставить традиционную сишную кучу со всеми её недостатками в смысле производительности

March 2024

S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930
31      

На этой странице

Автор стиля

Развернуть

No cut tags
Page generated 2026-03-01 08:46 pm
Powered by Dreamwidth Studios