Je travaille avec Akka depuis 7 ou 8 mois maintenant. Lorsque j'ai commencé, je travaillais sur des applications et je remarquais que les acteurs étaient utilisés pratiquement n'importe où une fois dans le système d'acteurs pour communiquer entre la plupart des objets. Alors j'ai fait la même chose - actionner un autre acteur pour x / y / z.
Il me semble que c'est peut-être trop aveugle, ce qui ajoute à la complexité là où ce n'est pas nécessaire - mais je ne trouve aucune discussion sur le point de savoir où les acteurs par rapport à la logique synchrone ou même asynchrone via des futurs devraient être utilisés. J'ai commencé à réfléchir à ma position après que mon collègue ait mentionné quelque chose de similaire. J'ai récemment réalisé plusieurs cas dans lesquels j'avais réfléchi à une tâche, puis évité de créer un autre acteur, car je pouvais obtenir le même résultat en toute sécurité dans une implémentation immuable - par exemple, obtenir des valeurs de configuration à partir d'une base de données ou d'un fichier où vous accédez très rarement et restez accessible. attendre le résultat est le cas d'utilisation réel.
En particulier, il me semble que dans tous les cas où vous jouez avec un état immuable, les acteurs créent de la complexité et limitent le débit - une fonction pure dans un objet, par exemple, peut être appelée simultanément sans risque, quel que soit le niveau de simultanéité. un acteur ne peut traiter qu'un message à la fois. L'autre considération à prendre en compte est de laisser filer le fil si vous devez attendre le résultat, sauf si vous commencez à utiliser des futures, mais dans les cas où vous n'avez pas à vous soucier de la messagerie asynchrone ou de l'échelle, il semble exagéré d'employer un acteur.
Ma question est donc la suivante: y at-il un mauvais moment pour utiliser des acteurs? Je suis curieux de voir à quoi ressemble Erlang et aimerais vraiment la perspicacité des autres. Ou s'il y a des principes autour de l'utilisation par les acteurs.
ask
un acteur et une simple plaine Future
.