Je travaille actuellement avec deux acteurs de la scène. Un, le producteur , produit des données et l'envoie à un parenter. Le producteur envoie un HashMap[String,HashMap[Object,List[Int]]]
par un message (avec cette pour marquer l'expéditeur):Acteurs Boîte aux lettres Dépassement. Scala
parcer ! (this,data)
L'analyseur attend en permanence des messages comme ceci:
def act(){
loop{
react{
case (producer, data)=> parse(data);
}
}
}
Le programme fonctionne parfaitement dans des conditions normales circonstances. Le problème vient avec de gros volumes de données et de nombreux messages envoyés (le hachage a environ 10^4 éléments, le hachage interne environ 100 éléments et la liste est longue de 100), le programme se bloque. Il ne montre aucune erreur ni exception. Ça s'arrête juste.
Le problème semble être que mon producteur travaille beaucoup plus vite que l'analyseur (et pour le moment je ne veux pas plus d'un parseur). Après la lecture scala mailbox size limit Je me demande si la boîte aux lettres de mon analyseur atteint sa limite. Le poste offre également quelques solutions, mais je dois d'abord m'assurer que c'est le problème. Comment puis-je tester cela?
Existe-t-il un moyen de connaître la limite de mémoire de l'acteur? Qu'en est-il de lire la mémoire utilisée/libre dans la boîte aux lettres?
Toutes les suggestions pour le flux de travail qui n'ont pas été publiées dans that link sont également les bienvenues.
Merci,
Si vous vous souciez de regarder les différentes implémentations, vous devriez jeter un oeil à Akka [1], il a à la fois l'équilibrage de charge [2] et le travail à voler [3] [1]: www.akkasource. org [2]: http://klangism.tumblr.com/post/582112173/akka-message-routing-part-2 [3]: http://doc.akkasource.org/dispatchers –