本文介绍了Schedulers.newElastic和Schedulers.elastic方法之间有什么区别?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在研究Flux和Mono,并在多线程环境中使用它们,并使用提供工作线程的Schedular.

I am working on Flux and Mono and using them in multi threaded environment and using the Schedular which provide the worker thread.

有许多选项可以使用elastic,parallel和newElastic启动Schedular.

There are many options to start the Schedular using elastic, parallel and newElastic.

这是我使用的代码:

    System.out.println("------ elastic ---------  ");
    Flux.range(1, 10)
      .map(i -> i / 2)
      .publishOn(Schedulers.elastic()).log()
      .blockLast();

    System.out.println("------ new elastic ---------  ");
    Flux.range(1, 10)
      .map(i -> i / 2).log()
      .publishOn(Schedulers.newElastic("my")).log()
      .blockLast();

并且它们都有相同的文档:

and both of them have the same documentation:

创建的线程池的最大数目是无限制的.

The maximum number of created thread pools is unbounded.

未使用的线程池的默认生存时间为60秒,请使用适当的工厂推送一个不同的值.

The default time-to-live for unused thread pools is 60 seconds, use the appropriate factory to push a different value.

此计划程序无法重新启动.

This scheduler is not restartable.

这是它们的日志:

------ elastic ---------  
[ INFO] (main) | onSubscribe([Fuseable] FluxPublishOn.PublishOnSubscriber)
[ INFO] (main) | request(unbounded)
[ INFO] (elastic-2) | onNext(0)
[ INFO] (elastic-2) | onNext(1)
[ INFO] (elastic-2) | onNext(1)
[ INFO] (elastic-2) | onNext(2)
[ INFO] (elastic-2) | onNext(2)
[ INFO] (elastic-2) | onNext(3)
[ INFO] (elastic-2) | onNext(3)
[ INFO] (elastic-2) | onNext(4)
[ INFO] (elastic-2) | onNext(4)
[ INFO] (elastic-2) | onNext(5)
[ INFO] (elastic-2) | onComplete()
------ new elastic ---------  
[ INFO] (main) | onSubscribe([Fuseable] FluxMapFuseable.MapFuseableSubscriber)
[ INFO] (main) | onSubscribe([Fuseable] FluxPublishOn.PublishOnSubscriber)
[ INFO] (main) | request(unbounded)
[ INFO] (main) | request(256)
[ INFO] (main) | onNext(0)
[ INFO] (main) | onNext(1)
[ INFO] (my-4) | onNext(0)
[ INFO] (main) | onNext(1)
[ INFO] (my-4) | onNext(1)
[ INFO] (main) | onNext(2)
[ INFO] (my-4) | onNext(1)
[ INFO] (my-4) | onNext(2)
[ INFO] (main) | onNext(2)
[ INFO] (main) | onNext(3)
[ INFO] (my-4) | onNext(2)
[ INFO] (main) | onNext(3)
[ INFO] (my-4) | onNext(3)
[ INFO] (my-4) | onNext(3)
[ INFO] (main) | onNext(4)
[ INFO] (my-4) | onNext(4)
[ INFO] (main) | onNext(4)
[ INFO] (main) | onNext(5)
[ INFO] (my-4) | onNext(4)
[ INFO] (main) | onComplete()
[ INFO] (my-4) | onNext(5)
[ INFO] (my-4) | onComplete()

两者之间有什么区别?

推荐答案

elastic()函数返回共享的调度程序实例.这意味着对该函数的多次调用将返回相同的调度程序.

The elastic() function returns a shared scheduler instance. This means that multiple calls to this function will return the same scheduler.

new为前缀的函数将始终创建一个新的调度程序实例.

The functions prefixed with new will always create a new scheduler instance.

在此处检查Schedulers类的文档: https://projectreactor.io /docs/core/release/api/

Check the docs for the Schedulers class here: https://projectreactor.io/docs/core/release/api/

这篇关于Schedulers.newElastic和Schedulers.elastic方法之间有什么区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-12 18:02