2014-12-06 5 views
2

Я хотел бы использовать актера для синхронизации доступа к пулу объектов. Актер будет управлять объектами в пуле, включая их состояние (занято v.s. свободно распределять). Когда ask отредактирован неактивным кодом, он будет возвращать объект из пула после его появления. Таким образом, вызывающий код имеет абстракцию для получения объекта для работы.Может ли актер вернуть объект в будущее, ожидая ответа?

Чтобы получить такую ​​абстракцию, мне нужен актер, чтобы иметь возможность отвечать на сообщения отправителей сообщений ask с объектом, который он выделяет. Может ли это быть выполнено и было бы ресурсоемким передать весь объект через сообщение?

+0

Почему это не может случиться? Это похоже на обычное сообщение akka. – Jatin

+0

Допустимо ли вернуть весь объект? – matanster

+0

Предполагая, что оба участника являются локальными, вы можете пройти все, что захотите. Если задействован удаленный доступ, объект должен быть сериализуемым. Кроме того, будьте предельно осторожны, если объект не является неизменным. – Ryan

ответ

2

Нет ничего плохого в возвращении будущего, которое будет завершено позже, актером.

Обратите внимание на этот вопрос, однако: вы завершите будущее каким-то изменчивым внутренним актором или нет?

Если ответ отрицательный, это нормально, и вам не о чем беспокоиться.

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

В противном случае это законно.

Кстати, это не то, что характерно только для фьючерсов. Вы должны следовать этому за любое сообщение, которое вы отправляете от актера.


UPDATE: расширение моего ответа обратиться комментарий OP еще.

Вопрос был в основном о возвращении объекта, который не является актером, от актера, а не только от сценария ... не уверен, относится ли этот ответ именно к этому ... объект может быть намного тяжелее, чем просто «регулярное» сообщение ... если Акка не передает сообщение таким образом, чтобы оно соответствовало ссылке/интернированию.

Там нет особых требований о «тяжести» сообщения в Акко и в целом это может быть любой объект (вы можете вывести это из-за того, что Any используется для типа сообщения, а не какой-то Акку -пределенный класс/признак сообщения с набором определенных ограничений).

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

В любом случае, если сообщение (объект) не оставляет границ одного и того же jvm - нормально, чтобы объект сохранял какое-либо состояние.

+0

Вопрос был в основном о возвращении объекта, который не является актером, от актера, а не только от сценария ... не уверен, относится ли этот ответ именно к этому ... объект может быть намного тяжелее, чем просто «регулярное» сообщение ... если Акка не передает сообщение таким образом, чтобы это было похоже на ссылку/интернирование. – matanster

+0

@matt проверить обновление на этом посту –

+0

большое спасибо! Я думаю, однако, это зависит от того, как Akka перемещает сообщения внутри одной и той же JVM. Если он сначала их сериализует, то я думаю, что отправка по целому объекту может быть довольно плохой для производительности. Сериализация, а затем неэтериализация всего объекта довольно интенсивна. Если это только ссылка на объект, хранящийся в памяти, это лучше. Поэтому я все еще немного не определился ... – matanster

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