Re[36]: плохой язык C++ :)
От: alexeiz  
Дата: 21.03.06 21:15
Оценка: 9 (2) -1
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, igna, Вы писали:


I>>А вдруг? А может это и вовсе одно и то же сообщение выводимое 10000000 раз в секунду, чтобы поиздеваться над сборщиком мусора?


VD>
VD>Количество сборок в поколнии 0: 8084
VD>Количество сборок в поколнии 1: 0
VD>Количество сборок в поколнии 2: 0
VD>

VD>Еще вопросы есть?

Ещё бы! Это же один из основных сценариев, под которые .NET GC был перво-наперво соптимизирован. А потом некоторые люди вроде Дона Бокса парили мозги людям, показывая на этом сценарии, какой это великолепный сборщик мусора, и как он легко уделывает new/delete в десятки а то и более раз. Это явление даже своё имя получило: Don Box Hoax. Поищите в google groups кому не лень.
Re[37]: плохой язык C++ :)
От: WolfHound  
Дата: 21.03.06 21:57
Оценка:
Здравствуйте, alexeiz, Вы писали:

A>Ещё бы! Это же один из основных сценариев, под которые .NET GC был перво-наперво соптимизирован. А потом некоторые люди вроде Дона Бокса парили мозги людям, показывая на этом сценарии, какой это великолепный сборщик мусора, и как он легко уделывает new/delete в десятки а то и более раз. Это явление даже своё имя получило: Don Box Hoax. Поищите в google groups кому не лень.

Если ты про это
http://discuss.microsoft.com/SCRIPTS/WA-MSD.EXE?A2=ind0208a&L=atl&D=0&P=20241
То заявления данного персонажа яйца выеденого не стоят ибо нет исходных кодов тестов. Следовательно невозможно преверить корректность тестов.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[38]: плохой язык C++ :)
От: alexeiz  
Дата: 21.03.06 22:13
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, alexeiz, Вы писали:


A>>Ещё бы! Это же один из основных сценариев, под которые .NET GC был перво-наперво соптимизирован. А потом некоторые люди вроде Дона Бокса парили мозги людям, показывая на этом сценарии, какой это великолепный сборщик мусора, и как он легко уделывает new/delete в десятки а то и более раз. Это явление даже своё имя получило: Don Box Hoax. Поищите в google groups кому не лень.

WH>Если ты про это
Я не про это, а про Дона Бокса.
Re[39]: плохой язык C++ :)
От: WolfHound  
Дата: 21.03.06 22:15
Оценка:
Здравствуйте, alexeiz, Вы писали:

WH>>Если ты про это

A>Я не про это, а про Дона Бокса.
Что про Дона Бокса? То что он лжет нужно доказать.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[40]: плохой язык C++ :)
От: alexeiz  
Дата: 21.03.06 22:25
Оценка: +1 -1
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, alexeiz, Вы писали:


WH>>>Если ты про это

A>>Я не про это, а про Дона Бокса.
WH>Что про Дона Бокса? То что он лжет нужно доказать.

Что он использовал подобные дешёвые трюки.
Re[59]: плохой язык C++ :)
От: Cyberax Марс  
Дата: 22.03.06 03:43
Оценка:
alexeiz wrote:
> Те, кто не знает стандартных библиотек, обречены на написание своих
> трёхколёсных велосипедов. Я где-то по этому поводу уже писал:
> http://rsdn.ru/Forum/Message.aspx?mid=851048&amp;only=1
Автор: alexeiz
Дата: 14.10.04

Свои квадратные велосипеды иногда значительно лучше стандартной
библиотеки

Мой велосипед, например, поддерживает move construction и resize у
аллокаторов.

Хотя STL все равно надо знать.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[38]: плохой язык C++ :)
От: Cyberax Марс  
Дата: 22.03.06 03:52
Оценка:
VladD2 wrote:
> C>Зато во время сборки ГЦ имеют обыкновение периодически сканировать
> C>память, причем несовсемтимо с realtime'ом.
> Какой на фиг реалтайм под Виндовс? Что ты к нему цепляшся. Ты хоть одну
> программу реального времени написал?
eao107 писал явно не про Windows, если посмотришь выше по треду.

Кстати, отсутствие задержек GC важно в играх, например. И чего-то у нас
качественных сложных игр на суперпроизводительном .NET пока не видно, за
исключением портов старых Doom/Quake'ов.

> C>А с realtime-GC уже радужная картина с "простым увеличением указателя на

> C>свободное место" пропадает.
> Не о собых проблем с realtime-GC. Просто у оного класса алгоритмов свои
> особенности.
Да? Хотите поговорить об этом?
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[39]: плохой язык C++ :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 22.03.06 06:31
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>eao107 писал явно не про Windows, если посмотришь выше по треду.


eao197, вообще-то.

Да, я говорил не про Windows. Там использовалась OS реального времени.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[40]: плохой язык C++ :)
От: Cyberax Марс  
Дата: 22.03.06 06:33
Оценка: :)
eao197 wrote:
> C>eao107 писал явно не про Windows, если посмотришь выше по треду.
> eao197, вообще-то.
Чего только в 8 утра не напишешь
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[34]: плохой язык C++ :)
От: prVovik Россия  
Дата: 22.03.06 07:05
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, prVovik, Вы писали:


V>>Тут дело даже не в том, что теоетически можно написать супер-аллокатор, применив какие-то инновационные супер оптимальные алгоритмы, которые в конечном счете "порвут" ГЦ. Нет, вся соль в том, что в аллокаторах можно учесть специфику конкретного приложения, благодаря которой можно реализовать крайне эффективное управление памятью, с которой не сможет сравниться никакие универсальные ГЦ и кучи.


VD>Хм. Несомненно! Как несомнено то, что потенциально можно написать любую программу на ассемблере и добиться того, что она будет быстрее любой скомпилированной с высокоуровневого языка.

При чем тут ассемблер и высокоуровневые языки? Смысл моего топика был в том, что часто работа с памятью происходит (или может происходить) согласно некоторых предопределенных схем. Например, это может быть схема: первый создался, первый удалился. В этих условиях применение применение универсальных рааспределителей памяти (гц, или хип) может оказаться нецелесообразным.

VD>Вот только не некотором объеме оказывается, что затраты на ручную оптимизацию слишком высоки. К тому же оказывается, что для того чтобы осуществить эти оптимизации нужно обладать нехилыми знаниями в довольно тонких вопросах (вроде влияния кэша процессора и т.п.). Ну, и в итоге получается, что в 99.9% случаев GC окажется предпочтительнее.

Конь в вакууме? Какая еще ручная оптимизация? Они разные бывают.

V>> Например, очень часто можно заметить, что 90% некоторых объектов в программе удаляются (то есть становятся ненужными) в той же последовательности, что и создаются. В этом случае можно использовать супер эффективный менеджер памяти, реализованный на основе циклического буффера. Он будет работать, как О(1), причем константа будет чрезвычайно мала (порядка нескольких команд процессора). Пример такой задачи: к нам приходят сообщения, мы их накапливаем в некотором буффере и постепенно обрабатываем. После обработки сообщение нас больше не интересует.


VD>А сообщения одного размера? Ой не верю. А если разных, то твоя идея идет лесом, так как блок маленького размера будет непригоден для следующего сообщения имеющего больший размер.

Не важно какого размера блоки. Важен только их порядок создания и удаления. Есть выделенный кусок памяти и два указателя: один указывает на голову "кучи", второй на "хвост". Выделяем с "головы", удаляем с "хвоста", просто перемещая соответствующим образом указатели.

VD>В то же время ЖЦ основанный на поколениях довольно эффективно разрулит эту ситуацию.

В том то и дело, что он ее будет РАЗРУЛИВАТЬ, как в прочем и хип. А тут то и рулить нечего! Прямо как в том анектоде: "Что тут думать — прыгать надо!"

VD>Можно сслочку на то, где ты видел подобные решения в реальной жизни? Сколько таких случаев было?

Это был проект сетевого движка для MMORPG. Приходило 8к сообщений (разного размера) в секунду и управление памятью как раз было узким местом.

VD>В случае если нужен стек, то использовать лучше стек.

VD>И чаще всего тут не катит. Только если объекты живут в стиле LIFO.
Нет. В случае, если удаляется объект не на вершине, то можно запоминать удаляемый указатель и реально освобождать память уже после того, как удалится объект на вершине стека. Точно такая же стретегия и для FIFO.

VD>Ну, а в С++ и без всяких аллокаторов можно вручную размещать объекты в стеке.

Не всегда удобно. Я имел ввиду именно некоторое хранилище объектов, которое разделяется между разными участками кода.

VD>Тут оно как. Или ты пишешь программу, или занимашся оптимизациями. Так вот ЖЦ можно рассматривать как автоматическое средство глобальной оптимизации.

У ГЦ есть свои особенности, которые в одних случаях идут в "+", а в других в "-". Да ты и сам об этом далее говоришь. Важно то, что и ГЦ и хип — это УНИВЕРСАЛЬНЫЕ средства, которые понятия не имеют о логике и характере работы моей программы.

VD>Увеличить производительность на порядки можно просто использовав более подходящие алогоритмы.

Совершенно верно! Например, использовав более подходящие задаче алгоритмы управления памятью. Именно это и было сделано.

VD>Так вот рельно лучше сосредоточиться на оптимизации прикладных алгоритмов, а не на оптимизации системных вещей вроде выделения памяти. В будущем, когда появятся более эффективные методы автоматической оптимизации можно будет извлечь из них выгоду.

Если задача близка к системной, то управление памятью может стать прикладной задачей.
лэт ми спик фром май харт
Re[37]: плохой язык C++ :)
От: igna Россия  
Дата: 22.03.06 07:37
Оценка: 12 (1) -1
Здравствуйте, alexeiz, Вы писали:

A> ... Don Box Hoax. Поищите в google groups кому не лень.



. . .

My measurements shows a performance ratio of 8:1 in advantage for C#
over C++. But no C++ would allocate such small objects on the heap.
C#, on the otherhand, have no choice. And if you rewrite to proper C++
code you get a ratio of 42:1 -that is C++ is 42 times (!) quicker than
C#. So I enlarged the test with a) object specific new/delete op and
b) with a object of approx size 32 kb. The meassurements are found
below — and they are quiet astonishing: C++ outperforms C# in every
aspect, only with one exception: the Don Box demo!!!

. . .

(http://discuss.microsoft.com/SCRIPTS/WA-MSD.EXE?A2=ind0208a&amp;L=atl&amp;P=20241)

Re[36]: плохой язык C++ :)
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 22.03.06 07:53
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Еще вопросы есть?


Я, в общем, с тобой согласн, но в примере демонстрируется идеальный случай.
http://www.smalltalk.ru | << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[39]: плохой язык C++ :)
От: igna Россия  
Дата: 22.03.06 08:10
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Кстати, отсутствие задержек GC важно в играх, например.



Или такой пример: Случайно выключил телефон во время процесса подозрительно напоминающего сборку мусора, результат — пропажа кое-какой информации. Да, понимаю, программа не должна была разрешать выключение в это время; но это пример того, как уменьшая вероятность ошибок программиста в одном месте использование GC увеличивает ее в другом.
Re[39]: плохой язык C++ :)
От: z00n  
Дата: 22.03.06 08:22
Оценка: 26 (1) +1
Здравствуйте, Cyberax, Вы писали:

C>Кстати, отсутствие задержек GC важно в играх, например. И чего-то у нас

C>качественных сложных игр на суперпроизводительном .NET пока не видно, за
C>исключением портов старых Doom/Quake'ов.

Старая мантра. Для игр достаточно самых примитивных GC:

Tim Sweeney:

Garbage collection performance in games:
Though an Unreal Engine 3 game can easily consume 512MB memory (on console) or up to 2GB (on PC, in the editing tools), less than 10% of that memory consists of data that contains pointers. The rest is bulk binary resources — like texture maps, sounds, animations, which don't require scanning for references.
50MB of data is well within the range of a mark-and-sweep garbage collector taking a few milliseconds within a game running at 30 frames per second. This is what we do. Realtime garbage collection is another possibility, but we didn't want to try to implement that within a primarily C++ engine.
Garbage collecting memory:
I do believe this is completely practical as the sole memory management solution, even in a realtime application like a game.

Re[36]: плохой язык C++ :)
От: Kluev  
Дата: 22.03.06 08:31
Оценка: +1 -1
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Kluev, Вы писали:


K>>Хотите раельных программ? Их есть у меня.


K>>http://www.qform3d.com/en/91.html — использует рукописный (мой) менеджер памяти.


K>>Стандартный хип на таких обьемах уже не просто тормозил, но и не мог выдать требуемое число блоков. Тогда я написал свой собственный менеджер памяти, и все стало ок.


VD>И где гарантия, что твое решение не является в пустую потраченным временем по сровнению с банальным выбором ЖЦ?

А где противоположная гарантия, что ЖЦ лучше моего решения? Напиши аналогичную программу на ЖЦ и сравним.


VD>В общем, не нужно тыкать в свой код.

А в какой надо тыкать, в чужой?

VD>Я вот видил пару оптимизаций в соей жизни. И весе они без проблем заменялись бы ЖЦ. Вот к примеру, компилятор C# (MS-ный) использует пул для каких-то тама оптимизаций. Вот только пул ничем не отличается от ЖЦ основанного на поколения с точки зрения скорости.


Свежо предание, но верится с трудом.
Re[38]: плохой язык C++ :)
От: WolfHound  
Дата: 22.03.06 09:03
Оценка:
Здравствуйте, igna, Вы писали:

I>

I>My measurements shows a performance ratio of 8:1 in advantage for C# over C++. But no C++ would allocate such small objects on the heap. C#, on the otherhand, have no choice. And if you rewrite to proper C++ code you get a ratio of 42:1 -that is C++ is 42 times (!) quicker than C#. So I enlarged the test with a) object specific new/delete op and b) with a object of approx size 32 kb. The meassurements are found below — and they are quiet astonishing: C++ outperforms C# in every aspect, only with one exception: the Don Box demo!!!

Еще раз: Данное заявление без исходных кодов ничего не стоит. То есть АБСОЛЮТНО НИЧЕГО.
Особенно на фоне выделеного... этот разоблачитель сравнивает теплое с мягким и при этом не знает о существовании value типов.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[35]: плохой язык C++ :)
От: WolfHound  
Дата: 22.03.06 09:03
Оценка:
Здравствуйте, prVovik, Вы писали:

VD>>Можно сслочку на то, где ты видел подобные решения в реальной жизни? Сколько таких случаев было?

V>Это был проект сетевого движка для MMORPG. Приходило 8к сообщений (разного размера) в секунду и управление памятью как раз было узким местом.
8 тысяч коротко живущих объектов в секунду... да ГЦ это даже не заметит. Это для него вобще не цифра.
Причем если для обычной кучи объекты разного размера приводят к фрагментации и серьезному замедлению работы то мусорщику на это начхать.
Болие того алгоритм мусорщика таков что при сборке мусора время тратится ТОЛЬКО на живые объекты. А в твоем случае подавляющие большинство объектов будут мусором.
Те это вобще идеальные условия для мусорщика.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[40]: плохой язык C++ :)
От: WolfHound  
Дата: 22.03.06 09:23
Оценка:
Здравствуйте, igna, Вы писали:

I>Или такой пример: Случайно выключил телефон во время процесса подозрительно напоминающего сборку мусора, результат — пропажа кое-какой информации. Да, понимаю, программа не должна была разрешать выключение в это время; но это пример того, как уменьшая вероятность ошибок программиста в одном месте использование GC увеличивает ее в другом.

Я думаю там были какието другие тормоза. Ибо я не верю что сборку мусора можно заметить на глаз даже на телефоне.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[39]: плохой язык C++ :)
От: WolfHound  
Дата: 22.03.06 09:23
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

C>Кстати, отсутствие задержек GC важно в играх, например.

Бред. Сборки нулевого и первого поколений никто не заметит ибо они не приведут к выпадению кадров. А сборка второго поколения приведет к выпадению одного кадра раз в несколько минут. И это тоже никто не заметит.
C>И чего-то у нас качественных сложных игр на суперпроизводительном .NET пока не видно, за исключением портов старых Doom/Quake'ов.
Вот только про разработчиков игр не надо. Я с ними очень не мало общался. В подавляющем большинстве случаев это просто жутчайшие консерваторы готовые удавится за пол процента производительности.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[36]: плохой язык C++ :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 22.03.06 09:26
Оценка: -1
Здравствуйте, WolfHound, Вы писали:

V>>Это был проект сетевого движка для MMORPG. Приходило 8к сообщений (разного размера) в секунду и управление памятью как раз было узким местом.

WH>8 тысяч коротко живущих объектов в секунду... да ГЦ это даже не заметит. Это для него вобще не цифра.

Как я понимаю, речь шла не о 8K объектов в секунду, а об обработке 8K сообщений в секунду. Еще не известно, сколько и чего создавалось во время обработки одного сообщения. А обработка 8K сообщений в секунду в сетевом приложении это не кисло.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.