Estou trabalhando com akka por 7-8 meses agora diariamente. Quando comecei, trabalhava nos aplicativos e notava que os atores seriam usados basicamente em qualquer lugar do sistema de atores para se comunicar entre a maioria dos objetos. Então eu fiz o mesmo - criar outro ator por x / y / z.
Parece-me que isso pode ser muito indiscriminado, adicionando complexidade onde não é necessário - mas não consigo encontrar nenhuma discussão sobre onde os atores versus a lógica síncrona ou assíncrona simples, via futuros, devem ser usados. Comecei a ponderar minha posição depois que meu colega de trabalho mencionou algo semelhante. Percebi vários casos, mais recentemente, em que ponderei uma tarefa e evitei criar outro ator porque consegui o mesmo resultado com segurança em uma implementação imutável - por exemplo, algo como obter valores de configuração de um banco de dados ou arquivo em algum lugar em que você acessa com pouca frequência e aguardar o resultado é o caso de uso real.
Em particular, parece-me que, em qualquer caso em que você esteja jogando com um estado imutável, os atores criam complexidade e limitam a taxa de transferência - uma função pura em um objeto, por exemplo, pode ser chamada simultaneamente, sem risco de qualquer nível de simultaneidade. um ator pode processar apenas uma mensagem de cada vez. A consideração alternativa é que você estacionará o encadeamento se precisar esperar pelo resultado, a menos que comece a usar futuros, mas nos casos em que não precisa se preocupar com mensagens ou escala assíncronas, parece que pode ser um exagero empregar um ator.
Então, minha pergunta é - há um momento ruim para usar atores? Estou curioso para saber como erlang parece e realmente gostaria do insight de outras pessoas. Ou se existem alguns princípios sobre o uso do ator.
ask
um ator e o uso de uma planície Future
.