Почтовый ящик является очередью - если ничто не вытягивает сообщения из очереди (т. Е. Если частичная функция в вашем цикле react
или receive
возвращает false
для isDefinedAt
), то сообщения просто остаются там,
Строго говоря, это утечка памяти (вашего приложения), хотя серьезность этого зависит от того, как число непрочитанных сообщений увеличивается (очевидно).Например, я часто использую актеров для слияния в запросе воспроизведения и «живом потоке» сообщений, идентифицированных по порядковому номеру.Моя реакция выглядит следующим образом:
var lastSeq = 0L
loop {
react {
case Msg(seq, data) if seq > lastSeq => lastSeq = seq; process(data)
}
}
Это содержит утечку памяти, но не «серьезную», так как будет верхняя граница числа повторяющихся сообщений (то есть не может быть больше один раззапрос на воспроизведение завершен).
Однако это все еще может вызывать раздражение, поскольку для каждой реакции подсистема актора снова сканирует эти сообщения, чтобы выяснить, могут ли они быть обработаны.
На самом деле, хорошая мысль о реальном почтовом ящике может быть здесь.Представьте, что вы оставили там всю свою нежелательную почту: довольно скоро вы будете страдать голод из-за всей нежелательной почты, которую вам придется просеять, чтобы получить выписку по кредитной карте.