Je suis tombé sur le scala.concurrent.blocking
, et selon la documentation Scala c'est ...
Utilisé pour désigner un morceau de code potentiellement bloquant, permettant au BlockContext actuel d'ajuster le comportement du runtime. Marquer correctement le code de blocage peut améliorer les performances ou éviter les blocages.
J'ai quelques doutes:
scala.concurrent.ExecutionContext.Implicits.global
contexte d'exécution ou pour les contextes d'exécution créés par l'utilisateur?blocking {
... }
?join
, et il y a plus de travail à accomplir qui pourrait potentiellement terminer l'un des fils. Alternativement, si l'un des threads ForkJoinWorker
exécute du code qui bloque autrement qu'en utilisant join
, il peut notifier le pool en utilisant ManagedBlocker
s .ExecutionContext
que le code exécuté par un thread de travail est potentiellement bloquant à certaines conditions, et que cette condition peut être résolue en calculant autre chose en utilisant un autre fil. Le contexte d'exécution peut ou non agir en conséquence. Dans l'implémentation actuelle (2.10, 2.11), blocking
ne fonctionnera qu'avec le contexte d'exécution global par défaut.Await
, ou vous attendez que l'état d'un moniteur soit résolu, et cette condition peut être résolue par une autre tâche/futur qui devrait s'exécuter sur le même contexte d'exécution - dans tous ces cas, vous devez utiliser blocking
.ÉDITER:
Pensez à jeter un œil au chapitre 4 dans le Apprentissage de la programmation simultanée dans Scala book .