2013-03-04 3 views
0

Я разрабатываю симуляцию, в которой будут много объектов, постоянно обновляющихся, возможно, 30 раз в секунду. Представим себе, что у нас 1000 объектов, каждая из которых имеет скорость и, следовательно, позицию, которую необходимо обновлять каждый тик.Один актер для имитируемого объекта или актер-менеджер?

Итак, как бы вы реализовали это с использованием модели актера? Я не обязательно использую Erlang для этого проекта, но ради аргумента, давайте просто скажем, что я есть. У вас есть актер для каждого из этих лиц? Или у вас есть «менеджер», который поддерживает и обновляет список этих объектов?

Learn You Some Erlang says:

Это правда, что Erlang процессы очень легкие: вы можете иметь сотни тысяч их существующих в то же время, но это не означает, что вы должны использовать его, что путь только потому, что вы можете. Например, создание шутерской игры, где все, включая пули, является собственным актером - безумие. Единственное, что вы будете снимать с такой игрой, это ваша собственная нога. Есть еще небольшая стоимость отправки сообщения от актера , а если вы слишком много делите задачи, вы сделаете вещи медленнее!

Таким образом, кажется, что менеджеры будут лучше. Или есть третий вариант, который я не вижу?

ответ

0

Вы говорите это! нет ни одного хорошего решения.

Теперь, чтобы быть более полезным, и с несколько фоном у меня есть, я думаю, вы должны смотреть на этих аспектах вашего проекта:

Вы говорите, что моделирование. Если вам нужно обновить коллекцию сущностей каждые 30 мс, сначала выполните работу, чтобы упростить операции и модель данных, и только второй подумайте, как можно эффективно обходить сбор данных.

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

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

Дальше подумайте, могут ли эти группы помочь вам уменьшить количество оценок (иметь адаптивную оценку времени по запросу? ...).

Последний, я думаю, чем вообще говоря, Erlang компактно и легко реорганизовать, так что воспользоваться ли это определить некоторые функциональные этапы, и для каждого из них,

сделать их работу, сделать их право и сделать то быстро (Kent Beck?)

Для последнего шага вы можете получить некоторую помощь от профилирующих инструментов, таких как fproof

Мужества: о)

0

Я думаю, что вы узнаете, что некоторые из них Erlang делают немного преждевременную оптимизацию.Вы должны использовать, какая когда-либо абстракция имеет для вас наибольший смысл, измерять любые проблемы и при необходимости реорганизовывать. Лично я считаю, что моделирование каждой частицы, поскольку ее собственный актер будет самым легким для решения, и также является самым идиоматическим подходом для модели Actor. Практически, однако, вы должны делать все, что плавает на вашей лодке.

Смежные вопросы