2013-08-06 1 views
0

J'ai un code spécial à exécuter lorsqu'un thread de pool commence à s'exécuter et un autre quand il a fini. Je veux dire, un besoin d'appeler un initialize() avant un thread start pour exécuter le code des acteurs, et un nettoyage() après celui-ci, pour initialiser les ressources spécifiques au thread (connexions à la base de données par exemple) et cleanup (Close n'importe quelle connexion déjà ouverte)Logique de threads personnalisée dans Akka

Ce sera génial de le faire dans une portée de fil. Je pense à faire un trait avec tous les acteurs qui se mélangent, mais dans ce cadre, l'initialisation se fait par acteur. Je pense que je vais avoir une meilleure performance si je le fais par fil.

Toute suggestion sera appréciée!

Merci

+0

Le but de akka est que vous ne devriez pas penser au filetage à faible niveau. Cependant, si vous voulez vraiment faire cela, je structurerais votre système d'acteur avec l'acteur A (gère votre initialisation et votre nettoyage) et engendrerait alors ses propres acteurs (travailleurs pour faire face à tout le reste). –

+0

Utilisez des acteurs épinglés et thread-pool-exécuteur pour vos acteurs épinglés. Le répartiteur par défaut partagera les acteurs entre les threads. – vitalii

Répondre

0

Surtout pour votre code de nettoyage, vous aurez du mal parce qu'il n'y a pas de crochet que vous pouvez utiliser. Je recommande d'utiliser le cycle de vie Acteur pour modéliser le cycle de vie de vos ressources, c'est-à-dire créer une connexion DB lorsque vous démarrez l'acteur et le fermer dans postStop. Ensuite, au lieu d'utiliser un handle de base de données ThreadLocal, vous envoyez vos requêtes DB aux acteurs (pool of). Ne vous inquiétez pas pour les fils, c'est le travail d'Akka.

Questions connexes