En tant que in my own answer to my own question, j'ai le cas où je suis en train de traiter un grand nombre d'événements qui arrivent dans une file d'attente. Chaque événement est géré exactement de la même manière et chacun peut même être géré indépendamment de tous les autres événements. Mon programme tire parti de la structure de concurrence de Scala et de nombreux processus impliqués sont modélisés comme suit: Actor
s. Comme Actor
s traitent leurs messages de manière séquentielle, ils ne sont pas bien adaptés à ce problème particulier (même si mes autres acteurs exécutent des actions qui sont sont). Comme je veux Scala à toute la création de fil « contrôle » (que je suppose est le point de celui-ci ayant un système d'accès concurrentiel en premier lieu), il semble que j'ai 2 choix:Traitement simultané dans Scala
- Envoyer les événements à un pool d'événement processeurs, que je contrôle
- obtenir mon
Actor
pour les traiter simultanément par un autre mécanisme
j'aurais pensé que # 1 nie le point d'utiliser le sous-système d'acteurs: combien les acteurs du processeur dois-je créer? étant une question évidente. Ces choses sont soi-disant cachées et résolues par le sous-système.
Ma réponse était de faire ce qui suit:
val eventProcessor = actor {
loop {
react {
case MyEvent(x) =>
//I want to be able to handle multiple events at the same time
//create a new actor to handle it
actor {
//processing code here
process(x)
}
}
}
}
Y at-il une meilleure approche? Est-ce incorrect?
modifier: Une approche est peut-être mieux:
val eventProcessor = actor {
loop {
react {
case MyEvent(x) =>
//Pass processing to the underlying ForkJoin framework
Scheduler.execute(process(e))
}
}
}
Bien que les acteurs ne semblent pas soutenir un bassin de travailleurs directement, ce Q a été utile pour exposer cette lacune. Tous les documents disponibles pour moi, ne mentionnez pas cela explicitement. – ePharaoh