reactive-programming - Scheduler.elastic() 只创建两个线程,它会在什么基础上创建线程,VM 的 CPU 处理器?
问题描述
我有一个有 2 个 CPU 的虚拟机。
这是 VM 的 CPU 信息: CPU(s): 2 ; 在线 CPU(s) 列表: 0,1;每个内核的线程数: 1
在其上运行 webflux (在 elastic() 调度程序上运行 1000 个对象的 ParallelFlux)应用程序。它总是只创建 2 个线程来执行不断变化的对象。
尝试使用FromSchedular(Executors.newFixedThreadPool(500)),仍然只创建 2 个线程。
我需要增加 VM 上的 CPU 还是有其他解决方案?
public Flux<FieldResult> execute(List<Field> fieldList){
return Flux.fromIterable(fieldList)
.parallel()
.runOn(elastic())
.flatMap(field -> {
return processField(field);
});
}
解决方案
Flux.parallel ()默认创建与 CPU 内核一样多的轨。
要使用更多导轨,您需要使用Flux.parallel(int parallelism)。之后,您可以使用ParallelFlux.runOn(Schedulers.elastic())
.
在您的示例中:
public ParallelFlux<FieldResult> execute(List<Field> fieldList){
return Flux.fromIterable(fieldList)
.parallel(fieldList.size())
.runOn(Schedulers.elastic())
.map(field -> {
return processField(field);
});
}
推荐阅读
- reactjs - 当数据在缓存中时,Apollo Client client.readQuery 返回 null
- python - Python 的 pow 函数:如何将 pow 函数集成到汇编语言中
- node.js - NodeJs 锐利的图像库 - 使用 Stream Api 调整大小会在 EOF 之后引发错误“stream.push()”
- git - 使用单一提交从其他分支创建新分支
- airflow - 安排在周五下午 5 点运行的双周作业
- machine-learning - 如何从无服务器功能中获取模型性能指标,例如 MAE、MSE、RMSE 等
- kubernetes - 以主备模式运行服务
- vue.js - 使用 v-model 和模板的 Vue 故事书示例?
- javascript - 有没有办法限制用户可以向下滚动多少但让他们能够向上滚动?
- r - R dplyr 列作为变量