J'essaie de comprendre la bibliothèque réactive Java et je suis passé par ce mot-clé "agnostique concurrentiel" ici . Quelqu'un peut-il fournir un petit exemple de travail pour mieux comprendre cela?
Cela signifie-t-il que le développeur doit s'assurer que son code fonctionnera correctement et qu'il atteindra la concurrence?
ps: très nouveau pour les applications simultanées / parallèles
Voici ce que dit le doc:
... il n'applique pas de modèle de concurrence. Au contraire, cela vous laisse, le développeur, aux commandes. Cependant, cela n'empêche pas la bibliothèque de vous aider avec la concurrence.
L'obtention d'un Flux ou d'un Mono ne signifie pas nécessairement qu'il s'exécute dans un Thread dédié. Au lieu de cela, la plupart des opérateurs continuent de travailler dans le thread sur lequel l'opérateur précédent a exécuté
Voyons quelques exemples:
1) Exécution non simultanée / parallèle. Par défaut, Project Reactor n'applique pas la concurrence. C'est pourquoi le Mono suivant s'exécute sur le même thread (principal) auquel il a été abonné:
Logger logger = LoggerFactory.getLogger(MyApplication.class);
Mono<String> helloMono = Mono.defer(() -> Mono.just("Hello!"))
.doOnNext(logger::info);
helloMono.subscribe();
Journaux:
22:06:15.235 [main] DEBUG reactor.util.Loggers$LoggerFactory - Using Slf4j logging framework
22:06:19.841 [main] INFO MyApplication - Hello!
2) Exécution parallèle. Nous pouvons faire exécuter le Mono sur un thread différent, imposant le parallélisme à l'aide de l' subscribeOn()
opération. Remarquez comment le Mono s'exécute sur le elastic-2
thread et nous devons utiliser un CountDownLatch pour forcer le programme à attendre:
Logger logger = LoggerFactory.getLogger(MyApplication.class);
Mono<String> helloMono = Mono.defer(() -> Mono.just("Hello!"))
.doOnNext(logger::info)
.doOnTerminate(latch::countDown)
.subscribeOn(Schedulers.elastic());
helloMono.subscribe();
latch.await();
Journaux:
22:11:26.704 [main] DEBUG reactor.util.Loggers$LoggerFactory - Using Slf4j logging framework
22:11:26.733 [elastic-2] INFO MyApplication - Hello!
Les frameworks tels que WebFlux utilisent une approche similaire au deuxième scénario dans lequel les opérations d'E / S libèrent le thread appelant (threads http). Ils sont exécutés en parallèle à l'aide de ces autres pools de threads.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots