J'ai un mécanisme assez standard en Java pour résoudre le problème:Migration de concurrency Java concurrency Scala
- Les éléments de travail doivent être programmés pour exécuter à un moment donné
- Chaque élément de travail doit alors attendre une condition de devenir de véritables
- Les éléments de travail devrait être résiliable
La solution que je l'utilise est comme suit:
- Avoir un programmateur mono-thread pour programmer mes éléments de travail
- Vous avez déjà un
ExecutorService
(qui peut être multi-thread) - Chaque élément de travail prévu soumet ensuite le travail réel à l'
ExecutorService
. LeFuture
retourné est mis en cache dans une carte. Un service d'achèvement est utilisé pour enlever l'avenir du cache lorsque le travail est terminé - Les articles peuvent être annulés par les futures mises en cache
Bien sûr, mon exécuteur testamentaire doit être au moins aussi grand que le nombre de bloquer les éléments de travail que je m'attends à avoir mais ce n'est pas un problème dans la pratique. Alors maintenant je suis en train de coder dans Scala et d'utiliser le framework d'acteur. En supposant que mon poste de travail peut être encapsulé dans un événement envoyé à un acteur:
- Quel mécanisme devrais-je utiliser pour programmer un poste de travail pendant un certain temps?
- Si un élément de travail est un événement envoyé à un acteur, comment puis-je m'assurer que le pool de threads de sauvegarde est plus grand que le nombre d'éléments pouvant bloquer simultanément
- Comment puis-je provoquer un travail planifié précédemment? article à annuler?
Pouvez-vous expliquer ce que signifie «une condition qui devient vraie»? Est-ce cet état global? Est-ce I/O? – Apocalisp
Je veux simplement dire que dans le cadre du travail, le processus pourrait devoir bloquer quelque chose (comme un fichier arrivant) –