Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выявление потеряных сильных ссылок на объекты, Кто и как? JIT или GAC? 
:(
    Опции темы
Абабо
Дата 17.5.2007, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 14.1.2005

Репутация: нет
Всего: 1



В этом случае всё ясно и довольно прозрачно. smile
--------------------
С уважением, Абабо.
PM MAIL   Вверх
archeg
Дата 17.5.2007, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 6.1.2007
Где: Киев

Репутация: 11
Всего: 27



Цитата(tol05 @  17.5.2007,  09:21 Найти цитируемый пост)
Раздел "другие вопросы производительности сборщика мусора"

Цитата

"В реальном мире весьма вероятно, что несколько потоков будут обращаться к управляемой куче или хотя бы работать с размещенными в ней объектами.
Когда в результате работы одного из потоков инициируется сбор мусора, остальные не должны обращаться ни к каким объектам (включая ссылки в собственном стеке), так как сборщик мусора может переместить эти объекты, изменив их адреса в памяти. (Мое прим. Он имеет в виду  дефрагментацию кучи после очистки от мусора)
Итак, когда сборщик начинает сбор мусора, нужно приостановить все потоки, исполняющие управляемый код..."



archeg, а как 
Цитата(archeg @  16.5.2007,  22:58 )
опционально - можно отключить

 ? Если знаешь, скажи. Нет, я серьезно, может Рихтер и не захотел вдаваться в эти подробности, и так материал у него сложный

Имел ввиду что можно отключить расширение Concurent GC, не более:
Код

<configuration>
  <runtime>
     <gcConcurrent enabled="false"/>
  </runtime>
</configuration>


В общем я уже сам запутался  smile 


--------------------
ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru)

Дядька всегда можно спросить в аське, если не задалбывать - не откажет smile
И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои  ;)
PM MAIL ICQ Jabber   Вверх
tol05
Дата 17.5.2007, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



ясно. А я и забыл про gcConcurrent smile 

Но это ведь дело не меняет - из какого потока не запустился бы GC, он-то все равно все потоки блокирует. Другое дело, что все мучаются, думают как теперь поднимать производительность. 
Вот такая инфа: 
- для участков с неуправляемым кодом применяется технологию "взлом" Hijacking. Смысл в том, что если поток находится в неуправляемом коде, CLR в его стеке встраивает загрушку, которая перехватывает управление на себя, когда поток вернется в управляемый код. Когда она получает управление, она работу потока останавливает и дает GC убрать мусор.
- для участков с управляемым кодом применяется технология Safe Points (безопасные точки). Компилятор для всех функций встраивает в код эти точки. Они говорят о отм, что если код до них дошел, то можно спокойно удалять мусор. Если код выполняется и GC собирается чистить кучу, то он не рубит все потоки безжалостно, а дает возможность каждому потоку дойти до ближайшей safe point и там только поток останавливает.

Вот еще накопал
http://rsdn.ru/article/dotnet/GCnet.xml

Рихтер в картинках  smile 
ну и, как обычно, немного переведенного MSDN.

там и тесты на производительность приведены.



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
archeg
Дата 17.5.2007, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 6.1.2007
Где: Киев

Репутация: 11
Всего: 27



Не совсем понимаю...
Цитата(tol05 @  17.5.2007,  18:30 Найти цитируемый пост)
Но это ведь дело не меняет - из какого потока не запустился бы GC, он-то все равно все потоки блокирует.

С http://rsdn.ru/article/dotnet/GC.xml:
Код

Concurent GC – это второй вид оптимизации процесса сборки мусора. 
Его суть заключается в том, что процесс построения графа объектов ведется без приостановки управляемых потоков. 
Вместо этого запускается специальный GC-поток, строящий граф. 

 smile 

Это сообщение отредактировал(а) archeg - 17.5.2007, 21:19


--------------------
ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru)

Дядька всегда можно спросить в аське, если не задалбывать - не откажет smile
И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои  ;)
PM MAIL ICQ Jabber   Вверх
tol05
Дата 17.5.2007, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



Теперь я не понял smile

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

Я так понимаю: 
как выше говорилось, GC работает в своем потоке. По умолчанию. Т.е. как раз когда
Цитата(archeg @  17.5.2007,  21:19 Найти цитируемый пост)
процесс построения графа объектов ведется без приостановки управляемых потоков.  
Вместо этого запускается специальный GC-поток, строящий граф

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

Не знаю, трудно сказать. Авторов много, и говорят они друг на друга непохоже. Такое ощущение по этой статье, что или чего-то он не договаривает. Все о поколенях, да о поколениях...
Хотел об оптимизации сказать, да что-то мало инфы реальной. Ни про Safe Points, ни про хакинг не сказал. А ведь это есть! Можно в гугле набрать, посмотреть...

Я Рихтеру верю больше smile , по крайней мере, он же учил группу мелкомягких (или по компилятору, или по самой CLR, не помню). Во всяком случае, он у них консультант, это я знаю точно.
А вот уважаемый автор http://rsdn.ru/article/dotnet/GC.xml - точно нет  smile 

P.S. Кстати, вот подтверждение и от Рихтера, по крайней мере в книжке его я про Safe Points и хакинг инфы не увидел, из другого источника знаю,  а в гугле - нашел!
http://msdn.microsoft.com/msdnmag/issues/1200/GCI2/
"Performance for Multithreaded Applications"

P.S.S. И еще, специально для твоего успокоения smile archeg Я без ссылок на авторитеты постараюсь, а то и так ссылок накидали столько, голова кругом идет. Давай с точки зрения здравого смысла определим, чья инфа ближе к истине?

Отдельный поток GC: и для мониторинга памяти, в том числе, нужен. Должна же CLR понять, когда памяти начинает нехватать и нужно GC вызывать, правда? 
Да, GC строит графы в своем потоке. А где он должен их строить? В код программы директивы что-ли встроить, чтобы через каждые три такта прыгать на построение графов, а вдруг памяти мало, много сборок в домен загрузили?

А системмных потоков, на самом деле, еще больше. Есть еще один зарезервированный поток для финализатора. Те корни, что поддерживают финализаторы в этом, отдельном от простых корней, потоке завершаются. Да и другие... Например, для многопроцессорной системы на каждый процессор - отдельный GC со своим потоком. Как говориться, потоков у нас для всех хватит.smile 

Так что не зацикливайся на потоках. Вот статья http://blogs.msdn.com/yunjin/archive/2005/07/05/435726.aspx (я упоминал уже ее) точно описывает сколько и какие потоки существует в CLR:

Finalizer thread
Debugger helper thread
Concurrent GC thread
Server GC threads
App Domain unload helper thread
Threadpool threads
( и, добавлю от себя, еще столько Thread-ов, сколько ты сможешь создать с помощью new Thread(ThreadStart)  ) 
не получилось без авторитетов smile

Суть в другом: потоки выполнения блокируются. Еще ни один чел не сказал, что сборка мусора не тормозит приложение. А как приложение может тормозить? Только приостановкой потоков выполнения.

Это сообщение отредактировал(а) tol05 - 17.5.2007, 23:45


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
archeg
Дата 17.5.2007, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 6.1.2007
Где: Киев

Репутация: 11
Всего: 27



Цитата(tol05 @  17.5.2007,  22:29 Найти цитируемый пост)
т.е. ты хочешь сказать, что пусть там GC строит свои дурацкие графы, а мы все равно и ссылок новых добавим, и в очередную вложенную функцию войдем, нам баловаться некогда, работать надо!!!

Кажется я понял.. Вся функция Concurrent GC заключается в том, чтобы сократить по минимуму остановку. В самом деле, остановка потока имеет место, но она довольно короткая. Остановка рабочего потока осуществляется не на время сборки всего мусора, а только в момент, изменения ссылок с которыми сейчас, в данный момент работает GC и добавление новых.

Код

When Concurrent GC is on, the biggest difference is with Suspend/Restart. 
As I mentioned Concurrent GC allows for shorter pause time because the 
application need to be responsive. So instead of not letting the managed 
threads run for the duration of the GC, Concurrent GC only suspends these 
threads for a very short period of times a few times during the GC. The rest 
of the time, the managed threads are running and allocating if they need to. 
We start with a much bigger budget for Gen0 in the Concurrent GC case so 
we have enough room for the application to allocate while GC is running. 
However, if during the Concurrent GC the application already allocated 
what’s in the Gen0 budget, the allocating threads will be blocked (to wait 
for GC to finish) if they need to allocate more.


Concurrent GC действует только во втором поколении - в первом и нулевом он не имеет смысла.

Рихтера стоит почитать, жалею что нету его под рукой :(

Это сообщение отредактировал(а) archeg - 17.5.2007, 23:36


--------------------
ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru)

Дядька всегда можно спросить в аське, если не задалбывать - не откажет smile
И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои  ;)
PM MAIL ICQ Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0483 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.