From b5f09da87d6f2854317f20877767320b9637bbfa Mon Sep 17 00:00:00 2001 From: asahi Date: Fri, 4 Apr 2025 22:16:36 +0800 Subject: [PATCH] =?UTF-8?q?doc:=20=E9=98=85=E8=AF=BBreactor=20schedulers?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spring/webflux/Reactor.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/spring/webflux/Reactor.md b/spring/webflux/Reactor.md index a62e034..28d131d 100644 --- a/spring/webflux/Reactor.md +++ b/spring/webflux/Reactor.md @@ -626,7 +626,23 @@ reactor提供了两种方法来切换执行的上下文: `subscribeOn`影响订阅的过程,通常推荐将其放在source之后。 ##### `subscribeOn`原理 -在`FluxSubscribeOn#subscribeOrReturn`中,会通过`scheduler#createWorker`创建worker +在`FluxSubscribeOn#subscribeOrReturn`中,会通过`scheduler#createWorker`创建worker,并通过worker来对`执行source.subscribe`的方法进行调度。 + +故而,在consumer执行subscribe时,随着reactor chain从尾到头,下游subscriber都会调用上游publisher的subscribe方法。在`FluxSubscribeOn`调用上游的subscribe时,则是会通过worker在进行调度,实际调用在worker中执行。 + +subscribeOn方法使用方式如下: +```java +Scheduler s = Schedulers.newParallel("parallel-scheduler", 4); + +final Flux flux = Flux + .range(1, 2) + .map(i -> 10 + i) + .subscribeOn(s) + .map(i -> "value " + i); + +new Thread(() -> flux.subscribe(System.out::println)); +``` +