- reactor中的并发有两种方式
1.1 flatmap,底层是多线程并发处理。在reactor的演讲中,flatmap对于io类型的并发效果较好.
flamap有两个参数: int concurrency, int prefetch。分别代表并发的线程数和缓存大小
注意凡是参数中有prefetch的,都表示这个operator有对应大小的缓存。
1.2 parallel,这种operator对cpu并发的效果较好
- groupyby的优化
因为groupby的缓存可能会用完导致hang住。因此这里有如下的可以考虑的优化方法
-
提高groupby的缓存数量
-
增加flatmap中的concurrency和prefetch值
List<String> data = List.of("alpha", "air", "aim", "beta", "cat", "ball", "apple", "bat", "dog", "ace");
Flux.fromIterable(data)
.log()
.doOnComplete(()->{ System.out.println("end");})
.groupBy(d -> d.charAt(0),5)
.flatMap(g -> g.map(String::valueOf)
.startWith(String.valueOf(g.key()))
.map(o -> {
System.out.println(o);
return o;
}),2,1
).subscribe();
-
share和publish两个方法可以将冷流变成热流
-
相对应的cache/buffer/onBackpressureBuffer等操作符因为存在了cache,因此将热流变成了冷流。
可学习文章: