Pergunta

Posso definir o tamanho máximo para caixa de entrada de um ator em Scala?

Leve o problema produtores e consumidores. Com tópicos que posso bloquear os produtores quando o buffer enche. Eu vi um par de exemplos produtor-consumidor escritos em Scala e todos eles atores uso com caixas de correio usados ??como um "tampão". Posso tamanho da caixa postal conjunto aos produtores causa de esperar até que um consumidor está pronto? Qualquer outra solução elegante para evitar o crescimento incontrolável de caixas de correio?

Foi útil?

Solução

Você pode criar um ator que age como um amortecedor entre o produtor eo consumidor. Os controlos de tampão a sua caixa de correio para os seus dados de espira. Ele envia de volta uma mensagem de "sobrecarga" para o produtor quando o número de produtos em buffer é muito alto; e envia uma mensagem "clara" uma vez que tudo está em ordem. Em caso de muitas mensagens que simplesmente deixa cair as mensagens recebidas (ou mais antigos).

O consumidor solicita ativamente por produtos do buffer, que por sua vez envia de volta um produto. Se o buffer está vazio, o consumidor continua à espera para a entrada.

O produtor envia produtos para o ator buffer. Se receber uma mensagem de "sobrecarga" pode parar a produção, ou pode continuar produzindo, sabendo o fato de que os produtos possam obter caiu.

É claro que essa lógica pode ser directamente transposta para o produtor ou o próprio consumidor, mas um buffer separado lhe permitirá introduzir vários produtores e / ou consumidores com mais facilidade.

Outras dicas

O método Actor.mailboxSize retorna o número de mensagens pendentes na caixa de entrada do Ator.

Isto pode ser usado para estrangular o produtor de várias maneiras.

Por exemplo, uma possibilidade poderia ser,

As verificações produtores se mailboxSize do consumidor é maior do que um limite. Se for, então ele envia um SpecialMessage para o consumidor, e os blocos em um semáforo. Quando o consumidor recebe esta SpecialMessage ele libera o semáforo. O produtor pode agora alegremente continuá-lo do negócio.

Isso evita polling assim como qualquer mensagem descartada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top