Форум
Компьютерные священные войны
Тема
Как правильно задавать вопросы
B
I
abc
U
X
3
X
3
H1
H2
H3
H4
H5
H6
Asm
C/C++
C#
Erlang
Haskell
IDL
Java
Lisp
MSIL
Nemerle
ObjC
OCaml
Pascal
Perl
PHP
Prolog
Python
Ruby
Rust
SQL
VB
Здравствуйте, Serginio1, Вы писали: S>Здравствуйте, ·, Вы писали: S>·>Здравствуйте, Serginio1, Вы писали: S>>>>> Ну вот тебе на это кстати vdimas приводит примеры. S>>>·>Он какие-то странные примеры приводит. В одном примере так вообще производительность pure-java оказалась близкой к C++. S>>>>>·>С текущей реализацией GC ты не можешь решить эту задачу с использованием dotnet managed GC. S>>>>> Можно. И кстати та же самая статья говорит, что можно. S>>>·>Цитату плз. S>>> То, что при такой нагрузке задержки начинаются только на 10 минуте. S>·>Это не цитата. Приведи точную цитату и ссылочку. Я не понимаю откуда это и в каком это контексте, топик уже слишком большой, у меня в голове не помещается. S>[cs] S> Я специально измерил на свем компе сколько выдает циклов S> var timer = new Stopwatch(); S> var threadCounter = 0; S> int hash = 0; S> Random random = new Random(); S> int start = (int)'A'; S> int end = (int)'z'; S> timer.Start(); S> while (threadCounter < 1000) S> { S> var text = new string((char)random.Next(start, end + 1), 1000); S> hash^=text.GetHashCode(); S> // Use 80K, If we are > 85,000 bytes = LOH and we don't want these there S> var bytes = new byte[80 * 1024]; S> random.NextBytes(bytes); S> hash ^= bytes.GetHashCode(); S> threadCounter++; S> Thread.Sleep(1); // So we don't thrash the CPU!!!! S> } S> timer.Stop(); S> Console.WriteLine(timer.ElapsedMilliseconds); S> Console.ReadLine(); S>[/cs] S> Получается порядка 1.7 сек. Пусть там запиь в Кэш тогда получается 2 секунды на 1000 циклов. S>Пусть крутится 4 потока. Тогда в секунду срабатывает 2000 циклов. S> Значит в секунду выделяется 100 кб* 2000= 200 мб S> В минуту это 12 ГБ. Я кончно не знаю сколько там памяти, но вообще GC срабатывает при заполнении определенного количества. S>Предположим, что ГС срабатывет при полном заполнении и пусть это будет 12 ГБ. S> Тогда он должен сработать как минимум 10 раз до того как задержки превысят порог. При этом нужно дефрагментировать порядка 200 мб S>>>·>Цитату плз. S>>> То, что при такой нагрузке задержки начинаются только на 10 минуте. S>·>Какая разница на какой минуте начинаются задержки? Интересует _только_ величина задержки. S> А в том, что при меньших нагрузках этих задержек не будет. S>>>·>Ещё раз - тест призван выяснить - что происходит, когда таки gc должен собрать мусор и дефрагментировать. S>>> Он будет справляться. Еще раз при такой нагрузке задержки начинаются только на 10 минуте. S>>>На обычных данных он может и справиться. Надо спрашивать у Vdimas. Я просто обратил внимание на тест где генерится огромный объем данных при этом кэш составляет порядка 200 мб и по идее сборка мусора должна происходить раз в несколько секунд, а не минут. S>·>Но по графику пики раз в минуту. S> Это касается старых версий S>[q] S>In early versions of the .NET CLR, garbage collection was a “Stop the world” event, i.e. before a GC could happen all the threads in your program had to be brought to a safe place and suspended. If your ASP.NET MVC app was in the middle of serving a request, it would not complete until after the GC finished and the latency for that user would be much higher than normal. This is exactly the issue that Stackoverflow ran into a few years ago, in their battles with the .NET Garbage Collector. If you look at the image below (from that blog post), you can see the spikes in response times of over 1 second, caused by Gen 2 collections. S>[/q] S> В новых версиязх задержки снижены S>[q] S>However in the .NET framework 4.5 there were enhancements to the GC brought in that can help mitigate these (emphasis mine) S>The new background server GC in the .NET Framework 4.5 offloads much of the GC work associated with a full blocking collection to dedicated background GC threads that can run concurrently with user code, resulting in much shorter (less noticeable) pauses. One customer reported a 70% decrease in GC pause times. S>But as you can see from the quote, this doesn’t get rid of pauses completely, it just minimises them. Even the SustainedLowLatency mode isn’t enough, “The collector tries to perform only generation 0, generation 1, and concurrent generation 2 collections. Full blocking collections may still occur if the system is under memory pressure.” If you want a full understanding of the different modes, you can see some nice diagrams on this MSDN page. S>[/q] S>[q] S>В качестве последнего теста, программа была запущена с помощью нового режима SustainedLowLatency, чтобы увидеть, какой эффект, который имеет. На графике ниже вы можете увидеть это предлагает более низкие время пауз, хотя и не в состоянии поддерживать их в течение неограниченного периода времени. Через 10 минут мы начинаем видеть более длинные паузы по сравнению с теми, кого мы видели, при выполнении теста всего за 5 минут. S>[/q] S> То есть при соответсвующих нагрузках вполне могут достигать небольшого времени достаточным для задачи. S>·>Вообще в статье плохо видно подробности, может у него куча 16гб... S>·>Но лучшего теста у меня нет. Если у тебя есть - показывай, не стесняйся. S> Есть описание механизмов сборки мусора S>http://mattwarren.org/2016/08/08/GC-Pauses-and-Safe-Points/
Теги:
Введите теги разделенные пробелами. Обрамляйте в кавычки словосочетания с пробелами внутри, например:
"Visual Studio" .NET
Имя, пароль:
Загрузить
Нравится наш сайт?
Помогите его развитию!
Отключить смайлики
Получать ответы по e-mail
Проверить правописание
Параметры проверки …