Reactor线程池切换publishOn与subscribeOn

在 Reactor(Project Reactor)中,publishOnsubscribeOn是用于切换执行线程(调度器)的两个操作符,但它们的行为和用途截然不同。下面是它们的详细区别与使用说明。


🧠 一句话理解

  • **subscribeOn**:指定源(Publisher)创建 & 订阅逻辑运行在哪个线程。
  • **publishOn**:指定后续操作符运行在哪个线程(从当前开始切换)。

🔁 subscribeOn:影响订阅动作及其“上游”

Mono.fromCallable(()->{log.info("Generating value");return"Hello";}).subscribeOn(Schedulers.boundedElastic())// 👈 切换线程.map(v->{log.info("Mapping: {}",v);returnv.toUpperCase();});

📌 说明:

  • subscribeOn会影响:
    • 源数据的创建(如fromCallableMono.just
    • 源的订阅行为
    • 上游所有逻辑(在链条中靠前)

🧪 输出结果中的 log 会显示Generating valueMapping: xxx都在boundedElastic线程中执行。


🔀 publishOn:影响后续操作符

Mono.fromCallable(()->{log.info("Generating value");return"Hello";}).publishOn(Schedulers.parallel())// 👈 从这里切换线程.map(v->{log.info("Mapping: {}",v);returnv.toUpperCase();});

📌 说明:

  • publishOn只影响后续操作符的执行线程
  • 当前位置之后的操作符都在新的线程中执行
  • 当前位置之前的执行线程不会受影响

🧪 输出 log:

[main] Generating value [parallel-1] Mapping: Hello

⚠️ 两者配合使用

Mono.fromCallable(()->{log.info("Generating value");return"Hello";}).subscribeOn(Schedulers.boundedElastic()).publishOn(Schedulers.parallel()).map(v->{log.info("Mapping: {}",v);returnv.toUpperCase();});

🧪 输出 log:

[boundedElastic-1] Generating value [parallel-1] Mapping: Hello

🔍 总结对比表

特性subscribeOnpublishOn
生效位置整个流的最上游(首次调用生效)只影响之后的操作符
常用于指定数据源的线程(IO、慢操作)指定数据处理的线程
多次调用只有第一次调用有效(对源)可以多次调用,影响每一处之后
应用场景创建慢资源(数据库、文件等)控制不同阶段逻辑在不同线程
替代线程切换逻辑可以代替传统线程池包装异步逻辑用于流中间切线程做不同的隔离或调度

✅ 实践建议

  • 网络/IO/阻塞调用 ➜ 放在subscribeOn(Schedulers.boundedElastic())
  • 业务计算阶段 ➜ 用publishOn(Schedulers.parallel())来提高并发度
  • 不要滥用这两个操作符,频繁切线程反而会增加上下文切换成本

如你有具体的使用场景(如 Flux + WebClient、文件读取、Kafka 等),我可以针对场景详细分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1210814.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本地win系统和vmware 虚拟机 ubuntu实现文件共享

在实际的工作开发中,经常会运用到虚拟机的情况。当然,随着win系统版本地提升,从win10开始,本身win系统也自带了虚拟机的功能。但有一些老式的机子,是不支持的。为此,我就以 vmware 安装 ubuntu 来实现它与本…

CDC虚拟串口与硬件串口传输速度的对比测试

CDC串口是指通过USB接口模拟传统串行通信端口(COM口)的一种技术,其全称为‌通信设备类(Communication Device Class)。而硬件串口是一种传统的串口。 USB CDC串口可支持最高12Mbps的传输速度(USB 2.0),而硬件的…

数据结构:加权图 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Xcode中iOS资源混淆问题与解决方案详解

iOS 资源混淆 概述 XCode项目中的文件夹分成两类: group 和 directory reference, 分别是虚结构和实结构. 黄色的 group 是默认的格式, 它的结构和磁盘上的文件夹毫无关系, 仅仅表示资源的逻辑组织结构, 这在管理源文件是非常方便. 同一段代码可以被很多项目使用, 也可能只使…

导师推荐2026 TOP10 AI论文软件:本科生毕业论文写作全解析

导师推荐2026 TOP10 AI论文软件:本科生毕业论文写作全解析 2026年AI论文写作工具测评:为何需要一份权威榜单? 随着人工智能技术的不断进步,越来越多的本科生开始依赖AI论文软件来提升写作效率与质量。然而,面对市场上…

2026年豆包优化工具选型:从技术底层到效果落地5大核心评估

2026年,当企业把AI搜索作为流量增长的“第二曲线”,豆包凭借专业场景语义理解和高精准用户匹配的优势,成为医疗、宠物服务、新能源等垂直行业的“流量金矿”。但很多企业试过工具后发现:内容总被判定“不相关”、排名上去了但询盘…

2026年1月DeepSeek优化服务商口碑TOP10:从技术到效果转化的选型

2026年,生成式引擎优化(GEO)行业迎来规模化发展机遇。据《2025中国AI商业服务白皮书》数据显示,GEO市场规模已突破128亿元,近三年复合增长率达到41.7%。《2024生成式AI搜索生态研究报告》指出,随着AI搜索技…

Git代码规范

分支命名分支与环境对应关系( 1 ) type(必须) : commit 的类别,只允许使用下面几个标识:常用的提交类型包括提交类型描述示例feat新功能增加(feature)feat: add user login featurefix修复BUGfix: correct …

亲测好用10个AI论文网站,继续教育学生轻松搞定毕业论文!

亲测好用10个AI论文网站,继续教育学生轻松搞定毕业论文! AI 工具让论文写作不再难 在当前的学术环境中,越来越多的继续教育学生开始借助 AI 工具来提升论文写作效率。尤其是 AI 降重工具的出现,不仅有效降低了 AIGC 率&#xff…

37、SQL的Explain

项目场景: SQL的Explain explain(SQL 优化工具标准)问题描述 今天下雨,小明去上班,之前维护的SQL,运行了一段时间,然后下午就 报错了~~~原因分析:解决方案:使用explain&a…

2026年主流GEO公司(服务商)选型与技术方案全景解析

声明:AI平台无官方广告,企业可通过GEO(生成式引擎优化)方式,使品牌信息自然融入AI生成内容。中国信通院数据显示,2026年国内GEO行业市场规模将增至286亿元,增速领跑AI营销赛道,超三分之一网页内容将专为AI搜索…

sql存储

1、查看已经创建的存储结构 格式:show create procedure 存储名; show create procedure c1; 2、查看所有已经创建好的存储 show PROCEDURE status ; 3、指定数据库查询存储 格式: show PROCEDURE statu…

c++实现交互式地震层位解释的软件

基于您的查询“c++实现交互式地震层位解释的软件”,结合当前的搜索结果,我为您提供以下信息和建议。1. 现有资源与工具分析根据搜索结果,目前并没有一个现成的、开源的、完整的“交互式地震层位解释软件”可以直接下…

JS DOM 操作与性能优化实战指南:构建高效可交互的页面结构 - 实践

JS DOM 操作与性能优化实战指南:构建高效可交互的页面结构 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

为什么要引入右值引用

关于c++11右值相关文章在网上已经有非常多深度好文,如果你还是看不懂,那么希望这篇文章能帮到你。在 C++ 旧时代,经常面临“对象拷贝”带来的性能瓶颈问题。 来先看一个类,这个类内部维护了一个很大的堆内存 class…

2026防撞车租赁推荐:大黄蜂机电设备有限公司,全国400城覆盖,45000余台设备供应

在建筑安全设备租赁领域,防撞车租赁作为道路施工、桥梁建设等场景的核心保障设备,其需求量随基建规模扩大持续攀升。据行业数据显示,2025年全国防撞车租赁市场规模突破120亿元,年复合增长率达18.7%,其中租赁模式占…

2026年满意度调查服务推荐:深圳神秘顾客市场调查有限公司,专业第三方满意度调研实力之选

在服务行业与企业管理领域,满意度调查已成为衡量服务质量、优化客户体验的核心工具。无论是企业提升服务水平,还是机构优化管理流程,精准的满意度数据都能为决策提供关键依据。深圳神秘顾客市场调查有限公司(简称S…

2026年防水透气阀专业厂家推荐:昆山艾尤诺新材料科技,全系产品覆盖多领域应用

在工业材料领域,防水透气阀作为关键功能性组件,广泛应用于电子、汽车、包装、医疗等多个行业。其核心功能是通过微孔结构实现气体交换,同时阻隔液体渗透,为设备提供可靠防护。据行业数据显示,2025年全球防水透气阀…

学霸同款10个一键生成论文工具,研究生高效写作必备!

学霸同款10个一键生成论文工具,研究生高效写作必备! AI 工具如何助力论文写作,提升效率与质量 在研究生阶段,论文写作是一项不可避免的任务,而随着人工智能技术的不断进步,AI 工具已经成为许多学生的得力…

2026年智能柜领域实力推荐:山东瀚岳智能科技,RFID/医疗/贵金属/工具/物料等全系智能柜解决方案

在工业数字化转型浪潮中,智能管理设备已成为提升企业运营效率的核心工具。作为以智慧物联为核心的工业场景化解决方案服务商,山东瀚岳智能科技有限公司凭借技术积累与场景化服务能力,为医疗、制造、金融等领域提供全…