2009-09-01 8 views
3

J'envisage d'utiliser des acteurs dans un système pour envelopper un peu de stockage (ce pourrait être une base de données, pourrait être une collection en mémoire). La raison pour laquelle je veux faire ceci est parce que je ne veux pas que les appels au magasin bloquent du code qui l'appelle et j'ai l'intention de pousser un volume élevé de messages à travers.Taille maximale des files d'attente d'acteur?

La file d'attente des messages entrants d'un acteur pouvait-elle gérer des centaines de milliers de messages? Quelle différence de performance y aurait-il entre le code appelant directement une méthode sur un objet et plaçant un acteur avec une file d'attente au milieu?

Vive

Joe

Répondre

4

La boîte aux lettres de l'acteur est un dequeue mis en œuvre comme une liste doublement liée mutable. La taille est uniquement liée à la mémoire disponible. Si vous envoyez trop de messages plus rapidement que l'acteur ne peut les traiter, vous recevrez une erreur OutOfMemoryError.

L'envoi d'un message à un acteur appelle une méthode. Il y a un surcoût associé à la mise en file d'attente du message, notifiant l'acteur, assignant un thread à l'acteur, etc. Il y a beaucoup de choses qui se passent avec ce message et donc une bonne quantité de frais généraux. Bien sûr, si la méthode se trouve là et bloque pendant un certain temps, elle finira par être plus lente, au moins par temps de mur.

Questions connexes