Ответ 1
-
Избегайте
!?
, где это возможно. Вы получите заблокированную систему! -
Всегда отправлять сообщение из потока подсистемы Actor. Если это означает создание переходного актера с помощью метода
Actor.actor
, то так оно и есть:case ButtonClicked(src) => Actor.actor { controller ! SaveTrade(trdFld.text) }
-
Добавьте обработчик "любого другого сообщения" в реакцию вашего актера. В противном случае невозможно определить, посылаете ли вы сообщение не тому актеру:
case other => log.warning(this + " has received unexpected message " + other
-
Не используйте
Actor.actor
для ваших основных участников, подклассActor
. Причина этого заключается в том, что вы можете предоставить разумный методtoString
только путем подкласса. Опять же, отлаживающие актеры очень сложны, если ваши журналы заполнены такими заявлениями, как:12:03 [INFO] Sending RequestTrades(2009-10-12) to scala.actors.Actor$anonfun$1
-
Документируйте участников вашей системы, явно указывая, какие сообщения они получат, и точно, как они должны вычислять ответ. Использование участников приводит к преобразованию стандартной процедуры (обычно инкапсулированной в рамках метода), чтобы стать логическим разбросом по нескольким реакциям актера. Легко потеряться без хорошей документации.
-
Всегда убедитесь, что вы можете общаться с вашим игроком вне его цикла
react
, чтобы найти его состояние. Например, я всегда объявляю метод, вызываемый с помощьюMBean
, который выглядит следующим образом кода. В противном случае может быть очень сложно определить, работает ли ваш актер, выключен, имеет большую очередь сообщений и т.д.
.
def reportState = {
val _this = this
synchronized {
val msg = "%s Received request to report state with %d items in mailbox".format(
_this, mailboxSize)
log.info(msg)
}
Actor.actor { _this ! ReportState }
}
-
Свяжите своих актеров и используйте
trapExit = true
- в противном случае они могут терпеть неудачу молча, что означает, что ваша программа не делает то, что вы думаете, и, вероятно, выйдет из памяти, поскольку сообщения остаются в почтовом ящике актера. -
Я думаю, что некоторые другие интересные варианты, касающиеся дизайнерских решений, которые должны быть сделаны с участием актеров, были выделены здесь и здесь