Java中的反应式编程基础知识
当我开始学习反应式编程时,我发现这里和那里有很多重要的概念,所以想做笔记,后来意识到为什么不把它作为一个博客发布。所以在这里你可以看到。
什么是java中的反应式编程?
反应式编程是一种编程范式,提倡用异步、非阻塞、事件驱动的方法来处理数据。
术语 "反应式 "指的是围绕着对变化做出反应的编程模型--对I/O事件做出反应的网络组件,对鼠标事件做出反应的UI控制器,以及其他。
从这个意义上说,非阻塞式就是反应式,因为我们现在不是被阻塞,而是在操作完成或数据可用时对通知做出反应的模式。
什么是Mono和Flux?
Mono和Flux都是发布器。在java中,两者都是CorePublisher的实现,而CorePublisher是从Publisher扩展而来的。

Flux实现了CorePublisher
核心发布器扩展了发布器
Flux是一个发布零或多个值的发布器,Mono发布零或一个值。
现在让我们看看一些例子
下面是Flux的例子。

为了使数据流动,你必须进行订阅,没有订阅数据就不会流动。默认情况下,流是懒惰的,这意味着没有你的消耗就不会执行。
输出

Flux 可以是无限的。我们可以使用takeUntil或take to stop等函数。
takeUntil的用途
Flux.
什么是 publishOn 和 subscribeOn ?

publishOn和subscribeOn是Project Reactor中方便的方法,它接受任何一个Schedulers来改变反应式管道中操作的任务执行环境。当subscribeOn强制源排放使用特定的Scheduler时,publishOn改变所有下游操作的Scheduler。
publishOn的例子。
Flux<Integer> flux = Flux.

所以,上面的例子中,在publishOn之后,所有的操作都在同一个线程上运行,直到我们看到另一个publishOn,当我们看到publishOn方法被遇到时,它就会改变上下文并在单独的线程中运行(基于提到的调度器)。
SubscribeOn的例子。
Flux<Integer> flux = Flux.

上面的例子中,尽管我们定义了多个subscribeOn方法(一个是_boundedElastic,另一个是单调度器),_ 但只有第一个接近源的subscribeOn方法优先。
注意。 我们可以有多个publishOn方法,这些方法将不断切换上下文。但是,subscribeOn方法不能这样做。只有最靠近源的第一个subscribeOn方法才有优先权。
什么是调度器和它们的类型?
调度器是一个抽象,它让用户对线程进行控制。它主要有四种类型,或者你也可以选择编写自己的调度器。
- Schedulers.single() - 为所有调用者提供一个可重复使用的线程。
- Schedulers.immediate() - 在当前线程中保持执行。
- Schedulers.boundedElastic() - 与elastic相同,但它的线程池大小(10*cpu核心数),它是IO操作/非阻塞调用的好选择。
- Schedulers.parallel() - 适合于CPU密集但时间短的任务。它可以并行执行N个这样的任务(默认情况下,N==CPU的数量)。
Schedulers.elastic() - 这是一个具有无限线程的线程池,不再是首选。
重要参考资料:
Java中的反应式编程基础知识--第1部分最初发表在Medium上的Javarevisited上,在那里人们通过强调和回应这个故事来继续对话。
