Что-то вроде активных объектов
От: Vintik_69 Швейцария  
Дата: 12.10.07 18:18
Оценка:
Добрый день,

В проекте возникла необходимость реализовать что-то вроде активных объектов. Каждый такой объект обладает собственным состоянием и потоком управления. Кроме того, объекты могут обмениваться асинхронными сообщениями. Объект должен уметь ожидать прихода определенного сообщения. Поток управления может переключаться только в момент ожидания сообщения. Код объекта зачастую делает какое-нибудь числодробление.
Делать это все на C++ явно несколько неудобно, если только не использовать какую-нибудь библиотеку легковесных процессов, однако я такой не нашел. Вопрос в том, как это сделать удобно? Может, можно использовать какой-нибудь другой язык (при том, что остальная часть проекта написана на C++)? Пока что есть только идея взять Ocaml и подкрутить его с помощью camlp4.
Re: Что-то вроде активных объектов
От: Стэн http://stanonwork.blogspot.com/
Дата: 12.10.07 19:04
Оценка:
Посмотри мою — act-o library.
Она, конечно, далеко не идеальна, но можешь взять ее как некоторую идею, которую потом переработаешь, или можно подкрутить планировщик потоков, чтобы она стала заметно лучше.
Или, если сможешь четко сформулировать пожелания по улучшению, то пиши мне, я помогу, но не обещаю, что точно...
Re[2]: Что-то вроде активных объектов
От: Vintik_69 Швейцария  
Дата: 12.10.07 19:35
Оценка:
Здравствуйте, Стэн, Вы писали:

С>Посмотри мою — act-o library.

Ага, спасибо. Это как раз то, о чем я писал, что на С++ писать неудобно — на каждое сообщение приходится делать свою функцию, из-за чего "гладкий" поток управления разрывается. Проблемы возникают в случае, если надо ожидать в данный момент определенное сообщение, а не все подряд.
Re[3]: Что-то вроде активных объектов
От: Стэн http://stanonwork.blogspot.com/
Дата: 12.10.07 19:47
Оценка:
Здравствуйте, Vintik_69, Вы писали:

С>>Посмотри мою — act-o library.

V_>Ага, спасибо. Это как раз то, о чем я писал, что на С++ писать неудобно — на каждое сообщение приходится делать свою функцию, из-за чего "гладкий" поток управления разрывается.
Ну, да, есть такое... И конечно, идеально было бы взять язык который изначально разрабатывался для параллельности и/или с поддержкой сопрограмм.

V_>Проблемы возникают в случае, если надо ожидать в данный момент определенное сообщение, а не все подряд.

Не очень понял, в чем именно проблема, но если что, то в act-o можно включать/отключать обработчики во время выполнения программы.
Re[4]: Что-то вроде активных объектов
От: Cyberax Марс  
Дата: 12.10.07 20:04
Оценка:
Здравствуйте, Стэн, Вы писали:

С>Ну, да, есть такое... И конечно, идеально было бы взять язык который изначально разрабатывался для параллельности и/или с поддержкой сопрограмм.

Erlang?
Sapienti sat!
Re: Что-то вроде активных объектов
От: Андрей Коростелев Голландия http://www.korostelev.net/
Дата: 12.10.07 20:06
Оценка:
Здравствуйте, Vintik_69, Вы писали:

V_>В проекте возникла необходимость реализовать что-то вроде активных объектов.


http://rsdn.ru/Forum/message/1023317.1.aspx
Автор: MaximE
Дата: 12.02.05
-- Андрей
Re[5]: Что-то вроде активных объектов
От: Стэн http://stanonwork.blogspot.com/
Дата: 12.10.07 20:17
Оценка:
Здравствуйте, Cyberax, Вы писали:

С>>Ну, да, есть такое... И конечно, идеально было бы взять язык который изначально разрабатывался для параллельности и/или с поддержкой сопрограмм.

C>Erlang?
Возможно, зависит от того, какую задачу решать надо...
Кстати, а как у Erlang с кластеризацией? На нем Google'вский Map-Reduce легко написать/использовать?
Re[6]: Что-то вроде активных объектов
От: Cyberax Марс  
Дата: 12.10.07 20:30
Оценка:
Здравствуйте, Стэн, Вы писали:

С>>>Ну, да, есть такое... И конечно, идеально было бы взять язык который изначально разрабатывался для параллельности и/или с поддержкой сопрограмм.

C>>Erlang?
С>Возможно, зависит от того, какую задачу решать надо...
С>Кстати, а как у Erlang с кластеризацией? На нем Google'вский Map-Reduce легко написать/использовать?
Ну как сказать... В Erlang легкость кластеризации является одной из главных фич Есть и распределенная база — "Mnesia" называется (классное название для базы данных, однако).

Map/reduce я там где-то уже даже видел сделаный.
Sapienti sat!
Re[5]: Что-то вроде активных объектов
От: Vintik_69 Швейцария  
Дата: 12.10.07 21:18
Оценка:
Здравствуйте, Cyberax, Вы писали:

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


С>>Ну, да, есть такое... И конечно, идеально было бы взять язык который изначально разрабатывался для параллельности и/или с поддержкой сопрограмм.

C>Erlang?

Не думаю... С одной стороны это будет оверкилл, потому что вытесняющая многозадачность не нужна, общение по сети тоже. Но что более важно, так это как совместить Erlang с числодробилками. Вполне может быть, что это совмещение и съест все прелести Эрланга.
Re[2]: Что-то вроде активных объектов
От: Vintik_69 Швейцария  
Дата: 12.10.07 21:18
Оценка:
Здравствуйте, Андрей Коростелев, Вы писали:

V_>>В проекте возникла необходимость реализовать что-то вроде активных объектов.


АК>http://rsdn.ru/Forum/message/1023317.1.aspx
Автор: MaximE
Дата: 12.02.05


Нативные потоки не подходят — объектов много. К тому же вытесняющая многозадачность и всякие мьютексы не требуются.
Re[4]: Что-то вроде активных объектов
От: Vintik_69 Швейцария  
Дата: 12.10.07 21:24
Оценка:
Здравствуйте, Стэн, Вы писали:

С>Ну, да, есть такое... И конечно, идеально было бы взять язык который изначально разрабатывался для параллельности и/или с поддержкой сопрограмм.

Ага, вопрос только какой

V_>>Проблемы возникают в случае, если надо ожидать в данный момент определенное сообщение, а не все подряд.

С>Не очень понял, в чем именно проблема, но если что, то в act-o можно включать/отключать обработчики во время выполнения программы.
Ну, я так понимаю, что при этом другие сообщения будут потеряны. К тому же пример не удачный — больше проблем, когда надо в зависимости от пришедшего сообщения делать разные вещи — как receive в эрланге.
Re[3]: Что-то вроде активных объектов
От: SloNN  
Дата: 14.10.07 16:05
Оценка:
V_>Здравствуйте, Андрей Коростелев, Вы писали:

V_>>>В проекте возникла необходимость реализовать что-то вроде активных объектов.


АК>>http://rsdn.ru/Forum/message/1023317.1.aspx
Автор: MaximE
Дата: 12.02.05


V_>Нативные потоки не подходят — объектов много. К тому же вытесняющая многозадачность и всякие мьютексы не требуются.


Когда известны точки переключения — такое удобно делать на fiber'aх (ConvertThreadToFiber etc). Мы когда-то боролись с дроблением логики в конечных автоматах, решили как раз написанием fiber'ных классов. Получилось очень удобно...
Re: Что-то вроде активных объектов
От: Didro Россия home~pages
Дата: 15.10.07 06:04
Оценка:
Здравствуйте, Vintik_69, Вы писали:

V_>Добрый день,

Добрый,

V_>В проекте возникла необходимость реализовать что-то вроде активных объектов. Каждый такой объект обладает собственным состоянием и потоком управления. Кроме того, объекты могут обмениваться асинхронными сообщениями. Объект должен уметь ожидать прихода определенного сообщения. Поток управления может переключаться только в момент ожидания сообщения. Код объекта зачастую делает какое-нибудь числодробление.


Если я правильно понял из последующих сообщений нужна именно кооперативная многозадачность?
Если да, то можно посмотреть как Гурин Сергей реализовал её в .NET (C#):
http://www.rsdn.ru/article/patterns/GsvActiveObjects.xml
Автор(ы): Гурин Сергей Васильевич
Дата: 21.06.2006
В статье рассматривается такой способ организации параллелизма, который:
— не привязан к языку и платформе;
— хорошо масштабируется (от одного процесса до нескольких миллионов);
— требует минимальных ресурсов памяти;
— не требует системных ресурсов;
— обеспечивает простые механизмы взаимодействия параллельных процессов.


Возможно я ошибаюсь, но идеальным вариантом будет SObjectizer ? Никогда его не исползовал, и имею представление только по вот таким вот
Автор: eao197
Дата: 03.08.06
постам на RSDN.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.