Re[22]: Смотри шире
От: minorlogic Украина  
Дата: 25.12.07 12:24
Оценка:
К сожалению не понял глубоко скрытого смысла этого поста по отношению к моему коментарию.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[22]: Смотри шире
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 25.12.07 12:42
Оценка:
Здравствуйте, Sinclair, Вы писали:

E>>А как вы будете все это делать с GC, если все это нужно будет действительно _удалить_, а не оставить в мусоре до следующего прихода GC?

S>GC.Collect() ?

Т.е. это нормальное решение, когда какая-то подсистема приложения дергает GC всего приложения для того, чтобы очистить свои ресурсы?

Но меня вот что больше интересует: принято ли при разработке компонентов на Java или .NET где-то документировать, что компонент инициирует внутри себя сборку мусора?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[19]: Смотри шире
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 25.12.07 12:44
Оценка:
Здравствуйте, Стэн, Вы писали:

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


Где GC может стать причиной остановки большого количества потоков для сборки мусора.

С>В свое время я набросал кое-что в блоге по этому поводу. А в библиотеке acto мне пришлось двухфазное удаление делать (так как в С++ нет GC).


В связи с этим вопрос -- а зачем было делать библиотеку на C++?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[20]: Смотри шире
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 25.12.07 12:54
Оценка:
Здравствуйте, eao197, Вы писали:

E>Где GC может стать причиной остановки большого количества потоков для сборки мусора.


Кстати, в java 6 научились вызывать не только stop-the-world, но и конкурентный сборщик мусора. Это снимает проблему блокирования приложения, но пропадает гарантия, что "управляемый неуправляемый" ресурс будет убран в обозримом будущем.
http://www.smalltalk.ru << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[23]: Смотри шире
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.12.07 13:15
Оценка:
Здравствуйте, eao197, Вы писали:
E>Т.е. это нормальное решение, когда какая-то подсистема приложения дергает GC всего приложения для того, чтобы очистить свои ресурсы?
Это — нет. По идее, у подсистемы должен быть свой независимый GC. Но такое щасте нам будет доступно только в 100%-managed OS.

E>Но меня вот что больше интересует: принято ли при разработке компонентов на Java или .NET где-то документировать, что компонент инициирует внутри себя сборку мусора?

По разному.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[24]: Смотри шире
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 25.12.07 13:20
Оценка:
Здравствуйте, Sinclair, Вы писали:

E>>Т.е. это нормальное решение, когда какая-то подсистема приложения дергает GC всего приложения для того, чтобы очистить свои ресурсы?

S>Это — нет. По идее, у подсистемы должен быть свой независимый GC. Но такое щасте нам будет доступно только в 100%-managed OS.

А почему так категорично на счет OS? Например, если мы на языке с GC делаем текстовый процессор, то создаем его из нескольких библиотек-подсистем. Одна из подсистем отвечает за отображение структуры документа, как раз она и строит хитрые деревья с хендлами ресурсов в узлах. Когда пользователь закрывает окно с графической структурой документа, это дерево должно быть разрушено. Вроде как все работает в рамках одного процесса, причем же здесь OS?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[24]: Смотри шире
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 25.12.07 13:32
Оценка:
Здравствуйте, Sinclair, Вы писали:

E>>Т.е. это нормальное решение, когда какая-то подсистема приложения дергает GC всего приложения для того, чтобы очистить свои ресурсы?

S>Это — нет. По идее, у подсистемы должен быть свой независимый GC. Но такое щасте нам будет доступно только в 100%-managed OS.

Ничего не даст. Всё равно нужно запускать GC в контексте приложения захватившего ресурс. А это либо stop-the-world в приложении, либо без гарантии, что ресурс будет убран.
http://www.smalltalk.ru << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[23]: Смотри шире
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 25.12.07 15:59
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>К сожалению не понял глубоко скрытого смысла этого поста по отношению к моему коментарию.


Неудивительно.
... << RSDN@Home 1.2.0 alpha rev. 725 on Windows Vista 6.0.6000.0>>
AVK Blog
Re[20]: Смотри шире
От: Стэн http://stanonwork.blogspot.com/
Дата: 25.12.07 17:34
Оценка:
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, Стэн, Вы писали:


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


E>Где GC может стать причиной остановки большого количества потоков для сборки мусора.

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

С>>В свое время я набросал кое-что в блоге по этому поводу. А в библиотеке acto мне пришлось двухфазное удаление делать (так как в С++ нет GC).


E>В связи с этим вопрос -- а зачем было делать библиотеку на C++?

Не на C++, а для С++... Приходится писать на C++, ну и хочется какого-то человеческого взаимодействия между потоками. Однажды мне пришлось делать небольшую программу, где была необходимость асинхронного взаимодействия между потоками, там я использовал Windows-очередь, но это уж как-то совсем неудобно мне показалось...
Re[21]: Смотри шире
От: remark Россия http://www.1024cores.net/
Дата: 25.12.07 17:41
Оценка: +1
Здравствуйте, Стэн, Вы писали:

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


E>>Здравствуйте, Стэн, Вы писали:


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


E>>Где GC может стать причиной остановки большого количества потоков для сборки мусора.

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


А в чём проблема? Никаких отличий от использования обычного умного указателя, например shared_ptr, для пользователя не будет.
Банально shared_ptr может делать atomic_inc/atomic_dec для счётчика ссылок, либо применять какую-то более умную схему. Но это не важно с т.з. пользователя, т.к. для него будет тот же "smart_ptr", а уж что он там делает за кулисами — не касается пользователя.
Почему у тебя там возникли проблемы — не понимаю...
Погляди реализацию в SObjectizer — там, например, когда актёру посылается сообщение, для него инкрементируется счётчик, а когда обработка завершается — декрементируется.



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[19]: Смотри шире
От: remark Россия http://www.1024cores.net/
Дата: 25.12.07 17:45
Оценка:
Здравствуйте, Стэн, Вы писали:

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


K>>В других языках зато либо вообще отсутсвует возможность автоматического управления ресурсами (C), либо это делается так, что хочется проклинать и язык, и ресурсы (C++). Д а и что тут "другие"? Языков, требующих GC немало, они не ограничиваются Java/C#. Так вот, при этом ручное управление ресурсами одинаково хорошо реализовано и в С, и в C++, и в C#. Значит, у языков с GC есть некоторое преимущество.


С>Кстати, есть, на мой взгляд, как минимум одна область, где GC дает явное преимущество, а возможно и просто является необходимостью — многопоточные и асинхронные приложения. В свое время я набросал кое-что в блоге по этому поводу. А в библиотеке acto мне пришлось двухфазное удаление делать (так как в С++ нет GC). А все потому, что ссылки на объект могут находиться в другом потоке, или в какой-нибудь очереди сообщений и явное удаление просто обрушит программу...



Там в блоге практически ничего нет. По существу только — определение циклов. Но это проблема существовала и до многопоточности и асинхронности. И соотв. не имеет с ней ничего общего.
Решали же все проблему циклов. Первый вариант — не создавать циклов. Второй — создавать циклы, но с помощью weak_ptr, т.ч. не было сильных циклов. Третьий — вручную разрушать циклы, когда они перестают быть нужны. Я не вижу тут никакой связи ни с многопоточностью, ни с асинхронностью... за исключением того, что это становится немного сложнее...



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[22]: Смотри шире
От: remark Россия http://www.1024cores.net/
Дата: 25.12.07 17:51
Оценка: :)
Здравствуйте, AndrewVK, Вы писали:

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


M>>Мне кажется у тебя неверная предросылка, о том что С++ програмист управляет памятью.


AVK>Ну да, в шарпе проблема явно юзинг указать для детерминированного завершения, а явно использовать смартпоинтеры для любого класса и руками разруливать циклы, это конечно не проблема .



Хух... Последние полдня мучался, что бы использовать смарт-поинтер для одного объекта. Вроде получилось. Да... не лёгкое было дело. Надо будет ещё протестировать, корректно ли он использовался, или ошибся где-нибудь...

Завтра буду весь день заниматься организацией циклов объектов, т.ч. не поминайте лихом. Да... циклы объектов — это вообще беда... Пора браться за ум и отучаться от этого моветона...



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[22]: Смотри шире
От: Стэн http://stanonwork.blogspot.com/
Дата: 25.12.07 17:57
Оценка:
Здравствуйте, remark, Вы писали:

E>>>Где GC может стать причиной остановки большого количества потоков для сборки мусора.

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

R>А в чём проблема? Никаких отличий от использования обычного умного указателя, например shared_ptr, для пользователя не будет.

R>Банально shared_ptr может делать atomic_inc/atomic_dec для счётчика ссылок, либо применять какую-то более умную схему. Но это не важно с т.з. пользователя, т.к. для него будет тот же "smart_ptr", а уж что он там делает за кулисами — не касается пользователя.
R>Почему у тебя там возникли проблемы — не понимаю...
R>Погляди реализацию в SObjectizer — там, например, когда актёру посылается сообщение, для него инкрементируется счётчик, а когда обработка завершается — декрементируется.
Вот, как раз с сообщениями у меня проблем меньше всего. Но актеры не просто посылают сообщения друг другу, но и связи между собой устанавливают. Каждый актер хранит ссылку на самого себя, плюс пользователь еще может добавить парочку таких ссылок, а еще можно описать схему, где a->b->c->a, ну и еще кучу разнообразных вариантов... а еще все это может меняться динамически... И как в общем случае управлять таким графом актеров, но так, чтобы не рубить жестко связи (это не всегда подходит) и чтобы не забывать ненужное?
Re[23]: Смотри шире
От: remark Россия http://www.1024cores.net/
Дата: 25.12.07 18:13
Оценка:
Здравствуйте, Стэн, Вы писали:

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


E>>>>Где GC может стать причиной остановки большого количества потоков для сборки мусора.

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

R>>А в чём проблема? Никаких отличий от использования обычного умного указателя, например shared_ptr, для пользователя не будет.

R>>Банально shared_ptr может делать atomic_inc/atomic_dec для счётчика ссылок, либо применять какую-то более умную схему. Но это не важно с т.з. пользователя, т.к. для него будет тот же "smart_ptr", а уж что он там делает за кулисами — не касается пользователя.
R>>Почему у тебя там возникли проблемы — не понимаю...
R>>Погляди реализацию в SObjectizer — там, например, когда актёру посылается сообщение, для него инкрементируется счётчик, а когда обработка завершается — декрементируется.
С>Вот, как раз с сообщениями у меня проблем меньше всего. Но актеры не просто посылают сообщения друг другу, но и связи между собой устанавливают.

С>Каждый актер хранит ссылку на самого себя,


не имеет значения

С>плюс пользователь еще может добавить парочку таких ссылок,


не имеет значения

С>а еще можно описать схему, где a->b->c->a,


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

С>ну и еще кучу разнообразных вариантов...


не имеет значения

С>а еще все это может меняться динамически...


не имеет значения



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[22]: Смотри шире
От: Cyberax Марс  
Дата: 25.12.07 18:49
Оценка:
konsoletyper wrote:
> C>Это не совсем так — там просто нужна структура типа "веревка". На
> чистом С++ она тоже неплохо делается, причем даже работает вполне быстро
> Что это за структура?
http://en.wikipedia.org/wiki/Rope_%28computer_science%29
Posted via RSDN NNTP Server 2.1 beta
Sapienti sat!
Re[24]: Смотри шире
От: Cyberax Марс  
Дата: 25.12.07 19:10
Оценка:
Sinclair wrote:
> E>Т.е. это нормальное решение, когда какая-то подсистема приложения
> дергает GC всего приложения для того, чтобы очистить свои ресурсы?
> Это — нет. По идее, у подсистемы должен быть свой независимый GC. Но
> такое щасте нам будет доступно только в 100%-managed OS.
Тогда другая проблема — все вызовы между доменами придется маршаллить.
Posted via RSDN NNTP Server 2.1 beta
Sapienti sat!
Re[21]: Смотри шире
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 25.12.07 21:10
Оценка:
Здравствуйте, Стэн, Вы писали:

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


E>>Где GC может стать причиной остановки большого количества потоков для сборки мусора.

С>Ведь есть же разные алгоритмы, необязательно все останавливать разом?!..

Я и не говорил про остановку всего разом. Но то что часть потоков будет одновременно приостановлена GC -- это факт. И в какой момент это произойдет заранее не известно.

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


Пользователю в любом случае придется как-то помечать уже не нужные ему актеры. Автор фреймворка должен будет только определиться с тем, как пользователь будет это делать: вызывать какой-нибудь deregister_actor или delete в C++, или занулять ссылку на актера в языке с GC. А остальное уже дело техники.

С>>>В свое время я набросал кое-что в блоге по этому поводу. А в библиотеке acto мне пришлось двухфазное удаление делать (так как в С++ нет GC).


E>>В связи с этим вопрос -- а зачем было делать библиотеку на C++?

С>Не на C++, а для С++... Приходится писать на C++, ну и хочется какого-то человеческого взаимодействия между потоками. Однажды мне пришлось делать небольшую программу, где была необходимость асинхронного взаимодействия между потоками, там я использовал Windows-очередь, но это уж как-то совсем неудобно мне показалось...

Как-то странно -- делать на C++ и вздыхать по поводу отсутствия GC


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[25]: Смотри шире
От: Sinclair Россия https://github.com/evilguest/
Дата: 26.12.07 03:28
Оценка:
Здравствуйте, Cyberax, Вы писали:
C>Тогда другая проблема — все вызовы между доменами придется маршаллить.
Нда, я пожалуй погорячился.
Вообще, должно быть другое решение.
Идея решения примерно такова: при нехватке любого ресурса поток встает на ожидании освобождения; как только встали все потоки — единственный, кому можно работать, это GC и finalyzer thread. Ну то есть необязательно доводить совсем уж до упора, чем больше потоков тормознулось, тем выше шансы у GC запуститься.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[26]: Смотри шире
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.12.07 11:17
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Ну то есть необязательно доводить совсем уж до упора, чем больше потоков тормознулось, тем выше шансы у GC запуститься.


Это не решает проблемы анализа — что можно трогать, а что нельзя. Столь сильное усложнение GC в итоге скорее всего приведет к суммарному замедлению, а не ускорению. Тут скорее надо думать в сторону аппаратной поддержки ссылок, по типу того же Эльбруса, и аппаратного же сканера деревьев ссылок. Тогда можно думать в сторону реально конкурентной сборки.
... << RSDN@Home 1.2.0 alpha rev. 725 on Windows Vista 6.0.6000.0>>
AVK Blog
Re[22]: Смотри шире
От: remark Россия http://www.1024cores.net/
Дата: 26.12.07 11:32
Оценка:
Здравствуйте, eao197, Вы писали:

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


E>Пользователю в любом случае придется как-то помечать уже не нужные ему актеры. Автор фреймворка должен будет только определиться с тем, как пользователь будет это делать: вызывать какой-нибудь deregister_actor или delete в C++, или занулять ссылку на актера в языке с GC. А остальное уже дело техники.



смарт поинтер не рассматривается?



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.