OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 16 Декабрь, 2019 02:48

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: Механизм агрегации деталей
СообщениеДобавлено: Пятница, 30 Ноябрь, 2012 19:26 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2640
Откуда: Россия, Ярославль
Третьего дня наткнулся на статью про механизм деталей из сборки Актив ББ (pdf-копию прикрепил для ознакомления).
Пришла в голову идея, реализовать подобное в виде библиотеки на стоковом ядре. Ну а тут и задача подвернулась, надо было доставить невидимому отображению на фоновой вкладке StdTabViews сообщение. Понятное дело, механизмами ББ не удалось доставить сообщение отображению без фрейма.
Поэтому склепал реализацию механизма деталей (ну или то, как я его понял), прицепил к отображению детальку, которая подключается к межмодульной шине и доставляет сообщения объекту. И всё. Всё заработало, с отдельными недостатками, но, у меня не возникло других идей применения деталей, кроме как прикрепить хендлер шины.

В связи с этим вопрос, видимо к И. Ермакову: а для чего ещё планировалось применять механизм деталей, и почему, в итоге, он остался похороненным в АББ, а не вынесен в отдельную библиотеку (не очень сложную, как мне показалось)?


Вложения:
details-abb.pdf [124.02 КБ]
Скачиваний: 282
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм агрегации деталей
СообщениеДобавлено: Пятница, 30 Ноябрь, 2012 21:13 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2934
Откуда: г. Ярославль
Присоединяюсь к вопросу и дополнительно интересны причины фунерализации Active BlackBox :) Активные объекты чудо как хороши, пробовали - знаем )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм агрегации деталей
СообщениеДобавлено: Воскресенье, 02 Декабрь, 2012 00:51 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9165
Откуда: Россия, Орёл
Хм, собственно, для каких компонентных структур возникла идея механизма деталей - понятно из статьи...
Но случаи достаточно частные, чтобы вводить спец. механизмы в язык ли или в рантайм.
Потому что можно тот же паттерн сделать и без такого "комфорта".
АББ и реализацию деталей в нём можно рассматривать как демку того, какие штуки можно делать с помощью современного компонентного рантайма, с метаинформацией. Если вдруг кому-то нужен будет каркас для задач, в которых сплошные такие отношения - может пригодиться.
В целом же "балование" сахаром на частный случай, впаянной в рантайм, показалось неудачным за пределами лабораторных игр :)

По поводу активных объектов - я считаю более эффективным подходом и применяю легковесный параллелизм в рамках одного (или нескольких по числу ядер) потоков. Без необходимости взаимного исключения... Собственно, опыт очень шустрых систем типа Node.Js или некоторых noSQL (mail.ru tarantool, например) меня в этом только убеждает. Да даже тот же Erlang!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм агрегации деталей
СообщениеДобавлено: Воскресенье, 02 Декабрь, 2012 01:09 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2934
Откуда: г. Ярославль
Илья, нельзя ли про легковесный параллелизм немножко поподробнее рассказать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм агрегации деталей
СообщениеДобавлено: Воскресенье, 02 Декабрь, 2012 09:00 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
Да, немножко подробнее, чем в Википедии :), было бы интересно...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм агрегации деталей
СообщениеДобавлено: Воскресенье, 02 Декабрь, 2012 15:45 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2934
Откуда: г. Ярославль
Владислав Жаринов писал(а):
Да, немножко подробнее, чем в Википедии :), было бы интересно...
Я же не просто так спрашиваю. Мне неинтересны бесконечные теоретические рассуждения, потому что у меня есть основной инструмент - BlackBox и как раз в применении к нему параллелизм и интересен.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм агрегации деталей
СообщениеДобавлено: Воскресенье, 02 Декабрь, 2012 15:57 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
Да мне тоже - что делается и какими языковыми средствами...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм агрегации деталей
СообщениеДобавлено: Воскресенье, 02 Декабрь, 2012 18:57 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9165
Откуда: Россия, Орёл
Ну, допустим, есть объекты, получающие от диспетчера через HandleMsg кванты времени. И передающие их ниже своим агрегированным объектам.

Для задач, где сложный "поток логики" и не хотелось бы прерываться, можно использовать нечто типа fiber-ов: в определённых местах процедуры ставится вызов типа Dispatcher.Switch, при котором диспетчер даёт поработать другой процедуре (всё в одном потоке).
Взаимное исключение на уровне защиты целостности уже становится не нужным.
Кстати, в Composita швейцарцы сделали именно такой параллелизм, но вызовы Switch вшивает в код компилятор (насколько я вкуривал их документацию).
А теперь поделим лёгкие задачи (так, чтобы они практически не пересекались по общим данным) между потоками по числу ядер. Тут уже взаимное исключение, конечно, понадобится, на взаимодействиях между несколькими "областями". Но появляется возможность синхронизации, которой нет при обычных потоках. Например, сборщику надо остановить всю активность в системе. При обычных потоках вы не можете их остановить просто так - хрен знает, где он был застукан.... Для отладочных целей проверяют регистр IP потока - и если он в неприличном месте, то поток снова резюмят, а потом опять суспендят, пока он не будет где-нибудь в подходящем месте... Но это только для отладки.
Так вот, при легковесном параллелизме, когда у вас все активности переключаются через Switch, то вы можете легко сделать GlobalLock в моменты, когда они вызовут Switch.
Ну а от зависаний защита - поток-watchdog, который генерирует исключение в том потоке, который слишком долго не вызывал Switch...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм агрегации деталей
СообщениеДобавлено: Понедельник, 03 Декабрь, 2012 08:28 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
Это не похоже на механизмы (не язык, :) а именно принцип реализации), обсуждавшиеся здесь: viewtopic.php?p=43805#p43805 ?..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм агрегации деталей
СообщениеДобавлено: Понедельник, 03 Декабрь, 2012 13:51 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2934
Откуда: г. Ярославль
"Это не те дроиды, которых вы ищете" (с) Кеноби О-В.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм агрегации деталей
СообщениеДобавлено: Среда, 05 Декабрь, 2012 13:33 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
Не, наверное, по ссылке не те... :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм агрегации деталей
СообщениеДобавлено: Среда, 05 Декабрь, 2012 13:54 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2640
Откуда: Россия, Ярославль
После бурного обсуждения, кроме прочих, пришли к такому выводу, что хэндлер и шина сообщений дают большую гибкость, в то время как агрегированные детали дают возможность ран-тайм проверки поддерживаемых типов деталей.
Но у меня уже как-то голова работает с сообщениями, и придумать достойной задачи из реальности для примера использования деталей я не смог.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм агрегации деталей
СообщениеДобавлено: Среда, 05 Декабрь, 2012 16:55 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9165
Откуда: Россия, Орёл
С сообщениями тоже легко проверять. Заводить парное сообщение CheckSupportOf..Msg.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм агрегации деталей
СообщениеДобавлено: Вторник, 11 Декабрь, 2012 04:32 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
Кстати, имел в виду, что бурно обсуждавшееся в связи с "синхронизаторами" как-то похоже на сопрограммы, как они описаны здесь: download/file.php?id=1413. И сказанное Ильёй тоже... Может, и Вы, Пётр, подразумевали пример на сообщения также из этого ряда?..


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB