Estou tentando entender a biblioteca reativa Java e deparei-me com essa palavra-chave "independente de concorrência" aqui . Alguém pode fornecer um pequeno exemplo de trabalho para entender melhor isso?
Isso significa que o desenvolvedor precisa garantir que seu código funcione bem e atinja a simultaneidade?
ps: muito novo para aplicativos simultâneos / paralelos
Isto é o que o documento diz:
... não impõe um modelo de simultaneidade. Em vez disso, deixa você, o desenvolvedor, no comando. No entanto, isso não impede que a biblioteca o ajude com a simultaneidade.
Obter um fluxo ou um mono não significa necessariamente que ele é executado em um thread dedicado. Em vez disso, a maioria dos operadores continua trabalhando no Thread em que o operador anterior executou
Vamos ver alguns exemplos:
1) Execução não simultânea / paralela. Por padrão, o Project Reactor não aplica simultaneidade. É por isso que o seguinte Mono é executado no mesmo thread (principal) em que foi inscrito:
Logger logger = LoggerFactory.getLogger(MyApplication.class);
Mono<String> helloMono = Mono.defer(() -> Mono.just("Hello!"))
.doOnNext(logger::info);
helloMono.subscribe();
Histórico:
22:06:15.235 [main] DEBUG reactor.util.Loggers$LoggerFactory - Using Slf4j logging framework
22:06:19.841 [main] INFO MyApplication - Hello!
2) Execução paralela. Podemos fazer o Mono executar em um thread diferente, reforçando o paralelismo usando a subscribeOn()
operação. Observe como o Mono é executado no elastic-2
encadeamento e precisamos usar um CountDownLatch para forçar o programa a esperar:
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();
Histórico:
22:11:26.704 [main] DEBUG reactor.util.Loggers$LoggerFactory - Using Slf4j logging framework
22:11:26.733 [elastic-2] INFO MyApplication - Hello!
Estruturas como o WebFlux usam uma abordagem semelhante ao segundo cenário no qual as operações de E / S liberam o encadeamento de chamada (encadeamentos http). Eles são executados em paralelo usando esses outros conjuntos de encadeamentos.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras