doc: 阅读reactor文档

This commit is contained in:
asahi
2025-04-01 01:31:52 +08:00
parent 95793600ba
commit f8c55e9709

View File

@@ -38,7 +38,10 @@
- [hybird push-pull model](#hybird-push-pull-model) - [hybird push-pull model](#hybird-push-pull-model)
- [`sink.onRequest`](#sinkonrequest) - [`sink.onRequest`](#sinkonrequest)
- [`onCancel` \& `onDispose`](#oncancel--ondispose) - [`onCancel` \& `onDispose`](#oncancel--ondispose)
- [Threading and Schedulers](#threading-and-schedulers)
- [Scheduler](#scheduler)
- [Handle](#handle) - [Handle](#handle)
>>>>>>> ff85f3d (doc: 阅读reactor文档)
# Reactor # Reactor
@@ -529,6 +532,21 @@ Flux<String> bridge = Flux.create(sink -> {
`sink`支持`onCancel``onDispose`回调,其区别如下: `sink`支持`onCancel``onDispose`回调,其区别如下:
- `onDispose`回调用于执行cleanup操作其在`complete`, `error`, `cancel`之后都会被调用。 - `onDispose`回调用于执行cleanup操作其在`complete`, `error`, `cancel`之后都会被调用。
- `onCancel`回调用于执行取消操作,其只针对`cancel`执行并且执行顺序位于cleanup之前 - `onCancel`回调用于执行取消操作,其只针对`cancel`执行并且执行顺序位于cleanup之前
### Threading and Schedulers
reactor模型和rxjava模型类型是并发无关的并不强制要求并发模型。并且大多数operator其运行的线程都和前一个operator相同。
`除非显式指定否则最顶层的operatorsource也会运行在subscribe方法被调用的线程中`
#### Scheduler
在reactor中操作执行在哪个线程中取决于`使用的Scheduler`。Scheduler和ExectuorService类似负责对任务进行调度但是相比于ExecutorService其功能更加丰富。
`Scheudlers`类中存在如下静态方法,分别访问不同的`execution context`
- `Schedulers.immediate()`:没有执行上下文,被提交的任务会在当前线程中被立马执行
- `Schedulers.single()`:线程上下文为一个`单个、可重用`的线程上下文。该方法会对所有的调用都使用相同的线程直到scheduler被`disposed`
- `Schedulers.newSingle()`:每次调用时都使用一个专属线程
- `Schedulers.elastic()`:该上下文是一个`无界、弹性的线程池`。在引入`Schedulers.boundedElastic()`方法后,该方法不再推荐被使用。
- `Schedulers.boundedElastic()`:该上下文是一个`有界、弹性的线程池`。通常将阻塞的任务放到该线程池中,令其不会占用其他资源。根据设置,该方法能够提供两种不同的实现:
- `ExecutorService-based`会在多个tasks之间对平台线程进行重用
其使用示例如下所示: 其使用示例如下所示:
```java ```java