Тут читал на хабре статью по сравнению производительности C# и C++. Сам джаву знаю плохо, но, может быть, кто-то производил замеры сам? Было бы интересно посмотреть сравнение, тем более везде говорят, что шарп и джава одинаковые по скорости.
Здравствуйте, xRAZORx, Вы писали:
RAZ>Тут читал на хабре статью по сравнению производительности C# и C++. Сам джаву знаю плохо, но, может быть, кто-то производил замеры сам? Было бы интересно посмотреть сравнение, тем более везде говорят, что шарп и джава одинаковые по скорости.
Это всё бред. Не заморачивайся. Вообще, на хабре мало чего хорошего бывает.
Здравствуйте, xRAZORx, Вы писали:
RAZ>Тут читал на хабре статью по сравнению производительности C# и C++
Эта статья написана человеком, который явно плохо знает плюсы. Даже с первого взгляда видно, что его плюсовый код пестрит warning'ами (я его не компилировал — честно!). Ну и забавные пассажи про оверхед умных указателей — беее. Если он знает С# также как и плюсы, то смотреть на тест нет смысла.
P.S. Я уже молчу про центральный пассаж, что bubble sort — это типичный код. Скажите мне пожалуйста, кто из плюсовиков или шарпистов вообще писал хоть какую-нибудь сортировку? А buble sort?
Здравствуйте, xRAZORx, Вы писали:
RAZ>Тут читал на хабре статью по сравнению производительности C# и C++. Сам джаву знаю плохо, но, может быть, кто-то производил замеры сам? Было бы интересно посмотреть сравнение, тем более везде говорят, что шарп и джава одинаковые по скорости.
В реальном мире инструмент выбирают в зависимости от задачи. Так что такие статьи можно воспринимать как развлекательные
Здравствуйте, Nuzhny, Вы писали:
N>Ну и забавные пассажи про оверхед умных указателей — беее.
Но толика правды в этом же есть? Умные указатели признаны довольно тормозным решением.
Здравствуйте, xRAZORx, Вы писали:
RAZ>Тут читал на хабре статью по сравнению производительности C# и C++. Сам джаву знаю плохо, но, может быть, кто-то производил замеры сам? Было бы интересно посмотреть сравнение, тем более везде говорят, что шарп и джава одинаковые по скорости.
Микробенчмарки зачастую бесполезное занятие. Есть куча примеров, где Java догоняет С++ по скорости. Хотя, в среднем, по больнице, это конечно же не так. Есть просто концептуальные решения, которые в Java будут быстрее. Тот же GC, очень эффективно собирает объекты по сравнению с вызовом кучи деструкторов в С++.
Здравствуйте, Nuzhny, Вы писали:
N>P.S. Я уже молчу про центральный пассаж, что bubble sort — это типичный код. Скажите мне пожалуйста, кто из плюсовиков или шарпистов вообще писал хоть какую-нибудь сортировку? А buble sort?
Сортировку — конечно. А пузырьковую в компьютерной графике используют. Как ни странно, иногда это правильный выбор.
Здравствуйте, Blazkowicz, Вы писали:
N>>Ну и забавные пассажи про оверхед умных указателей — беее. B>Но толика правды в этом же есть? Умные указатели признаны довольно тормозным решением.
Зависит от типа указателя и от задачи. Да вообще от многих и многих факторов.
Что же мы видим в статье, какую типичную задачу? Сортировку пузырьком. Будут ли умные указатели вносить в неё оверхед? Нет, конечно. К чему тогда этот голословный пассаж? Непонятно.
Здравствуйте, Don Reba, Вы писали:
DR>Сортировку — конечно. А пузырьковую в компьютерной графике используют. Как ни странно, иногда это правильный выбор.
На плюсах или на C# ты писал сортировку? В компьютерной графике — это не на шейдерах случайно? Интересно, когда это реально необходимо, можешь рассказать?
Здравствуйте, Nuzhny, Вы писали:
N>На плюсах или на C# ты писал сортировку?
На плюсах! Действительно сложно представить, когда это может понадобится в шарпе.
N>В компьютерной графике — это не на шейдерах случайно? Интересно, когда это реально необходимо, можешь рассказать?
Встречал в сортировке по прозрачности, когда предметов в неправильном порядке мало и они идут друг за другом.
Здравствуйте, Blazkowicz, Вы писали:
B>Здравствуйте, xRAZORx, Вы писали:
RAZ>>Тут читал на хабре статью по сравнению производительности C# и C++. Сам джаву знаю плохо, но, может быть, кто-то производил замеры сам? Было бы интересно посмотреть сравнение, тем более везде говорят, что шарп и джава одинаковые по скорости. B>Микробенчмарки зачастую бесполезное занятие. Есть куча примеров, где Java догоняет С++ по скорости. Хотя, в среднем, по больнице, это конечно же не так. Есть просто концептуальные решения, которые в Java будут быстрее. Тот же GC, очень эффективно собирает объекты по сравнению с вызовом кучи деструкторов в С++.
Чо же тогда браузеры не пишут на языке с GC? Там же куча объектов, куча деструкторов.....
Здравствуйте, xRAZORx, Вы писали:
RAZ>Тут читал на хабре статью по сравнению производительности C# и C++. Сам джаву знаю плохо, но, может быть, кто-то производил замеры сам? Было бы интересно посмотреть сравнение, тем более везде говорят, что шарп и джава одинаковые по скорости.
И на C# и на Java (и даже на JavaScript!) можно писать быстрый код, грубо говоря с незначительным отставанием от C++.
Если выйти за рамки примитивнейшего примера обработки массива целых целиком внутри одной функции — то такой код на Java/C# будет сложнее чем аналогичного кода на C++, такого кода будет больше и он будет намного ниже уровнем.
Основная причина этого в том, что в C++ многие механизмы абстракции бесплатны, либо крайне дешёвые — в то время как на Java/C# они вносят overhead, и для того чтобы догнать C++ от них приходится отказываться.
То есть на C#/Java (да и на JavaScript) стоит выбор — либо использовать высокоуровневые средства и получать тормоза, либо отказываться от них, пилить низкоуровневый boilerplate и получать производительность близкую к высокоуровнему коду C++.
Здравствуйте, Zenden, Вы писали:
Z>Чо же тогда браузеры не пишут на языке с GC? Там же куча объектов, куча деструкторов.....
Во-первых графика. Куча графики с серьезными требованиями к производительности. Особенно учитывая то как клиентская JVM тупит для десктопных приложений.
Во-вторых, а кто сказал, что в браузерах нет GC?
Здравствуйте, Zenden, Вы писали:
Z>Чо же тогда браузеры не пишут на языке с GC? Там же куча объектов, куча деструкторов.....
Можно подумать, что браузеры пишут какие-то небожители, которые всегда знают как сделать правильно.
Здравствуйте, Zenden, Вы писали:
Z>Чо же тогда браузеры не пишут на языке с GC?
Потому что mark-and-sweep gc довольно плохо работает когда много долгоживущих связанных объектов. Время работы GC пропорционально размеру дерева живых объектов. В обычной программе большинство объектов короткоживущие и GC работает хорошо. В сценариях тип браузера гораздо хуже.
Z>Там же куча объектов, куча деструкторов.....
Каких деструкторов? В движках браузера есть свой GC, вернее даже два, один для DOM, другой для JS. В ранних версиях они были не связаны, поэтому циклические ссылки между DOM и объектами JS вызывали утечку. Стандартный аллокатор C++ и любое подобие умных указателей (которые освобождают память в деструкторе) на такой задаче будет тормозить не меньше Java.
В отличие от GC джавы или .net, gc в браузере не пытается убирать весь мусор. Он в первую очередь заточен на низкую латентность. Поэтому каждая страница в современном браузере кушает 50-100мб памяти и очень легко на странице сожрать больше памяти, чем на сервере, который эти страницы раздает тысячам клиентов.
GC в браузере срабатывает не в момент выделения памяти, а в момент когда JS\DOM перестает работать. Это позволяет скрыть задержку GC, которая зачастую доходит до десятков мс (что сильно больше gen1 и на уровне gen2 сборки для C# и Java). То же самое можно и на managed языках сделать. Более того, в .NETном WPF делается примерно тоже, что в браузере, ибо там тоже мелких объектов.
Здравствуйте, Nuzhny, Вы писали:
N>P.S. Я уже молчу про центральный пассаж, что bubble sort — это типичный код. Скажите мне пожалуйста, кто из плюсовиков или шарпистов вообще писал хоть какую-нибудь сортировку? А buble sort?
Я писал сортировки и на плюсах и на шарпе. Вот на джаваскрипте пока не довелось, для продакшна, разумеется.
Вообще сортировки интересны совсем не тем, что их иногда таки нужно писать. 90% простейших алгоритмов в софте это видоизмененные версии сортировок. Если у человека проблема с сортировками, его незачем вообще в код пускать.
N>P.S. Я уже молчу про центральный пассаж, что bubble sort — это типичный код. Скажите мне пожалуйста, кто из плюсовиков или шарпистов вообще писал хоть какую-нибудь сортировку? А buble sort?
В среднем C++ будет быстрее, C# и Java будут идти на одном уровне, C# вероятно немного быстрее. При необходимости C# и Java можно оптимизировать довольно близко к уровню C++ или переписать нужную часть на C++.
В чём C++ будет идти вне конкуренции это в потреблении памяти (Java, C# будут потреблять в разы больше) и в предсказуемости времени выполнения (Java, C# могут включить сборщик мусора в любой момент и приложение может перестать отвечать некоторое время). С последним можно пытаться бороться более-менее успешно, но лучше писать такой код на C++.
Здравствуйте, Nuzhny, Вы писали:
N>P.S. Я уже молчу про центральный пассаж, что bubble sort — это типичный код. Скажите мне пожалуйста, кто из плюсовиков или шарпистов вообще писал хоть какую-нибудь сортировку? А buble sort?
Там дело не в том что это bubble sort, а в её интерфейсе.
Реальная сортировка (например std::sort) позволяет сортировать последовательности из разных типов контейнеров, с разными типами элементов, и с разными предикатами сравнения, задаваемыми например замыканиями. Если сделать такой интерфейс, то C#, и тем более Java, будут серьёзно проигрывать.
Здравствуйте, xRAZORx, Вы писали:
RAZ>Тут читал на хабре статью по сравнению производительности C# и C++. Сам джаву знаю плохо, но, может быть, кто-то производил замеры сам? Было бы интересно посмотреть сравнение, тем более везде говорят, что шарп и джава одинаковые по скорости.
Однажды скомпилировал на Java целочисленные вычисления(БПФ), написанные на C++. Разница была в 8 раз.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)