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 ] |
Заголовок сообщения: | |
Цитата: Еще несколько вопросов специалистам... Я не специалист, но всё-таки отвечу ![]() Firefly писал(а): 1. Можно ли на BlackBox написать нечто вроде простенького сервера приложений, который будет обрабатывать запросы с клиентов, и в котором будет спрятана логика работы с БД? Скорее даже так - стоит ли это делать именно в BlackBox, или на Java(C#) задачу можно решить проще?
В BlackBox-е сетевые программы пишутся с использованием неблокирующих сокетов. С одной стороны это даёт хорошую производительность, с другой - асинхронное программирование сложнее, и запросы должны обрабатываться без использования блокирующего кода. С введением многопоточности в BlackBox появится возможность выносить блокирующий код в потоки. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |