OberonCore
https://forum.oberoncore.ru/

Сборка мусора в BlackBox
https://forum.oberoncore.ru/viewtopic.php?f=1&t=299
Страница 1 из 1

Автор:  Firefly [ Суббота, 02 Сентябрь, 2006 10:32 ]
Заголовок сообщения:  Сборка мусора в BlackBox

Здравствуйте.
Я недавно заинтересовался средой Blackbox
и сразу же возник вопрос - есть ли в ней
принудительная сборка мусора?
Наподобие System.GC в Java?

Автор:  Евгений Темиргалеев [ Суббота, 02 Сентябрь, 2006 17:27 ]
Заголовок сообщения: 

Kernel.Collect; однако, Kernel предназаначен для использования каркасом, интерфейс закрыт.
Интересно, а для каких (прикладных) задач нужна явная сборка мусора?

Автор:  Firefly [ Суббота, 02 Сентябрь, 2006 17:35 ]
Заголовок сообщения: 

Прикладных задач еще нет - я только начал программирование вообще и Component Pascal в частности.
Вопрос в чем - если циклически выполняются какие-то действия, под которые среда отжирает память, то OutOfMemory может возникнуть и раньше, чем сработает сборщик, если я правильно понимаю?
Вот я и подумал - вставить в цикл принудительную сборку мусора при каждой n-ой итерации.

Автор:  Евгений Темиргалеев [ Воскресенье, 03 Сентябрь, 2006 07:50 ]
Заголовок сообщения: 

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

Автор:  Info21 [ Воскресенье, 03 Сентябрь, 2006 10:24 ]
Заголовок сообщения: 

Firefly писал(а):
Прикладных задач еще нет - я только начал программирование вообще и Component Pascal в частности.
Вопрос в чем - если циклически выполняются какие-то действия, под которые среда отжирает память, то OutOfMemory может возникнуть и раньше, чем сработает сборщик, если я правильно понимаю?
Вот я и подумал - вставить в цикл принудительную сборку мусора при каждой n-ой итерации.


Если только начинаете -- ни в коем случае не вставлять! В общем случае можете только помешать сборщику.
Просто вообще забудьте про эту проблему -- пока.

Разумеется, на цикл надо будет внимательно посмотреть -- после того, как построите корректную программу и обнаружите, что там что-то реально тормозит.

Автор:  Илья Ермаков [ Воскресенье, 03 Сентябрь, 2006 10:45 ]
Заголовок сообщения: 

Евгений Темиргалеев писал(а):
Kernel.Collect; однако, Kernel предназаначен для использования каркасом, интерфейс закрыт.
Интересно, а для каких (прикладных) задач нужна явная сборка мусора?

Чтобы не импортировать Kernel, существует еще Services.Collect.
Однако в остальном - см. выше....

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

Автор:  Firefly [ Воскресенье, 03 Сентябрь, 2006 11:15 ]
Заголовок сообщения: 

Здравствуйте.

Да, возможно я слишком рано полез в системные нюансы среды. Сначала нужно получше узнать язык.
Еще несколько вопросов специалистам:
1. Можно ли на BlackBox написать нечто вроде простенького сервера приложений, который будет обрабатывать запросы с клиентов, и в котором будет спрятана логика работы с БД? Скорее даже так - стоит ли это делать именно в BlackBox, или на Java(C#) задачу можно решить проще?
2. Возможна ли в среде BlackBox автообновление клиентских приложений с сервера?. Т.е. когда при запуске клиента он скачивает с сервера дополнительные модули, расширяющие его функциональность.
3. И последнее - планируют ли разработчики BlackBox'а дальнейшее развитие среды?
Дело в том, что я сейчас приступаю к дипломной работе. В качестве языка разработки склоняюсь к Java(по многим причинам, среди них главная - наши разработчики пишут на Java, т.е. всегда можно будет спросить у них, если что-то непонятно).
А недавно наткнулся на Component Pascal, и он мне сразу понравился (в первую очередь синтаксисом - после C-подобной Явы просто ляпота:-).

Автор:  Илья Ермаков [ Воскресенье, 03 Сентябрь, 2006 14:45 ]
Заголовок сообщения: 

Здравствуйте!

1) С работой с сетью проблем нет - существует подсистема Comm, которая предоставляет высокоуровневые абстракции для сетевых соединений. Однако серверу требуется многопоточность. Текущая версия ББ многопоточности не поддерживает (точнее, поддерживается коллективная многозадачность, как в Win 3.1, когда отдельные действия из очереди выполняются основным потоком одно за другим). Можно использовать системные потоки Windows, если в потоке не будут использоваться динамические объекты. Касательно полноценного решения этой проблемы скажу ниже...

2) Можно просто передать по сокетному соединению кодовый файл модуля, сохранить его и затем загрузить.

3) По поводу развития среды и одновременно многопоточности... Не хотел говорить пока, но раз уж разговор зашел :-)
Мы (команда ООО "Метасистемы") сейчас находимся на стадии финального тестирования и документирования многопоточной версии среды - Active BlackBox 1.5.. Разработано новое ядро с поддержкой безопасной многопоточности, сборкой мусора и обработкой трепов для потоков. Написаны модули с высокоуровневыми абстракциями: задачи (Tasks), взаимодействующие через рандеву, мониторы. Готовимся к выпуску бета-версии.

Автор:  Firefly [ Воскресенье, 03 Сентябрь, 2006 15:33 ]
Заголовок сообщения: 

Илья Ермаков писал(а):
3) По поводу развития среды и одновременно многопоточности...

Это обнадеживает. О сроках не спрашиваю - плохая примета;-)
Спасибо за развернутый ответ.

Автор:  Alexander Shiryaev [ Воскресенье, 03 Сентябрь, 2006 17:45 ]
Заголовок сообщения: 

Цитата:
Еще несколько вопросов специалистам...

Я не специалист, но всё-таки отвечу :roll:

Firefly писал(а):
1. Можно ли на BlackBox написать нечто вроде простенького сервера приложений, который будет обрабатывать запросы с клиентов, и в котором будет спрятана логика работы с БД? Скорее даже так - стоит ли это делать именно в BlackBox, или на Java(C#) задачу можно решить проще?


В BlackBox-е сетевые программы пишутся с использованием неблокирующих сокетов. С одной стороны это даёт хорошую производительность, с другой - асинхронное программирование сложнее, и запросы должны обрабатываться без использования блокирующего кода. С введением многопоточности в BlackBox появится возможность выносить блокирующий код в потоки.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/