React响应式编程库Project Reactor详解

Project Reactor 深度解析 随记 一、Project Reactor 深度解析 - 1. 响应式编程介绍,实现以及现有问题 随记: 1、响应式编程框架:RxJava 、 Project Reactor、Vert.x 以及 java 9 引入的响应式编程的标准接口Flow 2、什么是响应式编程 1)、传统编程存在两个问题:一个问题是:一个请求一个线程,是阻塞式调用,高并发时,如果一个IO线程阻塞的时间比较长,有可能导致线程池所有的线程都处于阻塞状态,这样就没法处理请求了。另一个问题是:一个请求要并行处理时,写代码比较麻烦。 2)、基于回调的C 阅读详情

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)、《解密程序员的思维密码——沟通、演讲、思考的实践》作者、清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。

📙不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

Java程序员廖志伟

💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

优快云

# 🌟 Project Reactor:响应式编程库详解

## 🍊 定义

Project Reactor 是一个开源的响应式编程库,专为构建高并发的应用程序而设计。它通过提供一种声明式的方法来处理异步数据流,使得开发者能够更高效地解决复杂的异步编程挑战。

## 🍊 核心概念

### 🎉 核心范式:反应式编程

Project Reactor 的核心理念是反应式编程,它允许程序以数据流的形式来处理事件。这种编程范式与传统的命令式编程有着本质的不同,后者通常以命令的形式来处理事件。

#### 📝 Reactor API

Reactor API 提供了一系列的接口和类,旨在帮助开发者创建、处理和订阅数据流。这些接口和类包括:

- **Flux**: 表示一个可能包含多个元素的异步数据流。
- **Mono**: 表示一个可能包含单个元素的异步数据流。
- **Maybe**: 表示一个可能不包含任何元素的异步数据流。
- **Single**: 表示一个可能包含单个元素的异步数据流,与 Mono 类似。
- **Many**: 表示一个可能包含多个元素的异步数据流,与 Flux 类似。

#### 📝 核心组件

Reactor API 包含了多种核心组件,用于处理数据流:

- **Fluxed**: 将一个同步数据流转换为异步数据流。
- **MonoFluxed**: 将一个同步数据流转换为异步数据流。
- **MaybeFluxed**: 将一个同步数据流转换为异步数据流。
- **SingleFluxed**: 将一个同步数据流转换为异步数据流。
- **ManyFluxed**: 将一个同步数据流转换为异步数据流。

### 🎉 应用场景

Reactor API 在以下场景中特别有用:

- 处理异步数据流,如网络请求、数据库操作等。
- 构建高并发的应用程序。
- 采用声明式编程范式简化异步编程。

### 🎉 优势与局限

| 优势 | 局限 |
| --- | --- |
| 简化异步编程 | 学习曲线较陡峭 |
| 提高应用程序性能 | 依赖外部库 |

### 🎉 实际案例

以下是一个使用 Reactor API 处理异步数据流的简单示例:

```java
Flux<String> flux = Flux.just("Hello", "World");
flux.subscribe(System.out::println);

在这个示例中,我们创建了一个包含 "Hello" 和 "World" 的异步数据流,并使用 subscribe 方法订阅了该数据流。当数据流中的元素被处理时,它们将被打印到控制台。

🍊 数据流处理示例

🎉 示例描述

在这个示例中,我们将展示如何使用 Reactor API 来处理一个包含多个元素的异步数据流,并对这些元素进行一些基本的操作,如映射、过滤和转换。

🎉 代码示例

Flux<String> flux = Flux.just("Apple", "Banana", "Cherry", "Date");

// 映射数据流中的元素
Flux<String> mappedFlux = flux.map(s -> "Fruit: " + s);

// 过滤数据流中的元素
Flux<String> filteredFlux = mappedFlux.filter(s -> s.startsWith("Fruit: "));

// 转换数据流中的元素
Flux<String> transformedFlux = filteredFlux.map(s -> s.toUpperCase());

// 订阅并打印结果
transformedFlux.subscribe(System.out::println);

🎉 输出结果

FRUIT: APPLE
FRUIT: BANANA
FRUIT: CHERRY
FRUIT: DATE

在这个示例中,我们首先创建了一个包含水果名称的异步数据流。然后,我们使用 map 操作将每个元素转换为包含 "Fruit: " 前缀的字符串。接着,我们使用 filter 操作来过滤掉不包含 "Fruit: " 前缀的元素。最后,我们使用 map 操作将每个元素转换为大写,并通过 subscribe 方法订阅并打印结果。

🍊 并发编程核心知识点

🎉 底层技术实现细节

📝 Reactor 核心概念
🔥 Reactor 模式

Reactor 模式是一种响应式编程模式,它允许程序以异步的方式处理事件。在这种模式中,事件由发布者(Publisher)发布,并由订阅者(Subscriber)接收。这种模式特别适合处理高并发场景,因为它能够有效地管理大量并发事件。

技术原理应用场景优势与局限实际案例
异步事件驱动高并发场景、实时数据处理提高系统吞吐量、降低资源消耗Web 应用、消息队列、实时数据流处理
🔥 核心组件
🔥 1. Publisher

发布者负责发布事件,它可以是一个方法、一个类或一个线程。发布者的主要职责是触发事件,并将事件传递给订阅者。

技术原理应用场景优势与局限实际案例
事件发布异步编程、事件驱动简化事件处理逻辑Web 应用、消息队列、实时数据流处理
🔥 2. Subscriber

订阅者负责接收事件,并对其进行处理。它可以是一个方法、一个类或一个线程。订阅者的主要职责是响应事件,并执行相应的操作。

技术原理应用场景优势与局限实际案例
事件接收异步编程、事件驱动简化事件处理逻辑Web 应用、消息队列、实时数据流处理
🔥 3. Subscription

订阅关系由 Subscription 表示,它负责管理订阅者和发布者之间的交互。Subscription 提供了取消订阅、请求更多数据等功能。

技术原理应用场景优势与局限实际案例
订阅管理异步编程、事件驱动简化事件处理逻辑Web 应用、消息队列、实时数据流处理
📝 Reactor 模式优势
  • 异步事件驱动,提高系统吞吐量
  • 资源消耗低,降低系统负载
  • 简化事件处理逻辑,提高开发效率
📝 核心架构
🔥 核心类
🔥 1. Mono

Mono 表示一个可能不存在的值,它可以是空值或一个具体的值。Mono 用于处理单值异步操作。

技术原理应用场景优势与局限实际案例
单值处理异步编程、事件驱动简化单值处理逻辑Web 应用、消息队列、实时数据流处理
🔥 2. Flux

Flux 表示一个可能不存在的值序列,它可以是空序列或一个具体的值序列。Flux 用于处理值序列的异步操作。

技术原理应用场景优势与局限实际案例
值序列处理异步编程、事件驱动简化值序列处理逻辑Web 应用、消息队列、实时数据流处理
🔥 3. Maybe

Maybe 表示一个可能不存在的值,它可以是空值或一个具体的值。Maybe 用于处理可能不存在的值。

技术原理应用场景优势与局限实际案例
单值处理异步编程、事件驱动简化单值处理逻辑Web 应用、消息队列、实时数据流处理
🔥 4. MonoProcessor

MonoProcessor 是一个处理 Mono 的处理器,它可以将 Mono 转换为其他类型的值。

技术原理应用场景优势与局限实际案例
处理器异步编程、事件驱动简化处理器逻辑Web 应用、消息队列、实时数据流处理
🔥 5. FluxProcessor

FluxProcessor 是一个处理 Flux 的处理器,它可以将 Flux 转换为其他类型的值序列。

技术原理应用场景优势与局限实际案例
处理器异步编程、事件驱动简化处理器逻辑Web 应用、消息队列、实时数据流处理
🔥 核心接口
🔥 1. Publisher

Publisher 接口定义了发布者的行为,它负责发布事件。

技术原理应用场景优势与局限实际案例
事件发布异步编程、事件驱动简化事件处理逻辑Web 应用、消息队列、实时数据流处理
🔥 2. Subscriber

Subscriber 接口定义了订阅者的行为,它负责接收事件。

技术原理应用场景优势与局限实际案例
事件接收异步编程、事件驱动简化事件处理逻辑Web 应用、消息队列、实时数据流处理
🔥 3. Subscription

Subscription 接口定义了订阅关系的行为,它负责管理订阅者和发布者之间的交互。

技术原理应用场景优势与局限实际案例
订阅管理异步编程、事件驱动简化事件处理逻辑Web 应用、消息队列、实时数据流处理
🔥 4. Processor

Processor 接口定义了处理器的行为,它负责将输入转换为输出。

技术原理应用场景优势与局限实际案例
处理器异步编程、事件驱动简化处理器逻辑Web 应用、消息队列、实时数据流处理
📝 核心功能
🔥 1. 异步编程

Reactor 支持异步编程,允许程序以异步的方式处理事件,提高系统吞吐量。

🔥 2. 非阻塞IO

Reactor 支持非阻塞IO,降低系统负载,提高系统性能。

🔥 3. 背压机制

Reactor 支持背压机制,防止系统过载,提高系统稳定性。

🔥 4. 资源管理

Reactor 支持资源管理,合理分配系统资源,提高系统性能。

📝 底层实现
🔥 1. 线程模型
🔥 1.1 线程池

Reactor 使用线程池来处理事件,提高系统性能。

🔥 1.2 线程安全

Reactor 使用线程安全机制,保证系统稳定运行。

🔥 2. 内存管理

Reactor 使用内存管理机制,合理分配内存资源,提高系统性能。

🔥 3. 数据结构
🔥 3.1 队列

Reactor 使用队列来存储事件,提高系统性能。

🔥 3.2 环形缓冲区

Reactor 使用环形缓冲区来存储事件,提高系统性能。

📝 与其他框架对比
🔥 1. 与 Spring WebFlux 对比

Reactor 和 Spring WebFlux 都是响应式编程框架,但 Reactor 更注重底层实现,而 Spring WebFlux 更注重与 Spring 框架的集成。

🔥 2. 与 Vert.x 对比

Reactor 和 Vert.x 都是响应式编程框架,但 Reactor 更注重底层实现,而 Vert.x 更注重与 JVM 生态系统的集成。

🔥 3. 与 Netty 对比

Reactor 和 Netty 都是网络编程框架,但 Reactor 更注重响应式编程,而 Netty 更注重网络编程。

📝 应用场景
🔥 1. 高并发场景

Reactor 适用于高并发场景,如 Web 应用、消息队列、实时数据流处理。

🔥 2. 异步编程场景

Reactor 适用于异步编程场景,如异步文件读写、异步网络请求。

🔥 3. 资源密集型场景

Reactor 适用于资源密集型场景,如大数据处理、实时计算。

📝 性能优化
🔥 1. 线程池配置

合理配置线程池参数,提高系统性能。

🔥 2. 内存优化

合理配置内存参数,提高系统性能。

🔥 3. 数据结构优化

合理选择数据结构,提高系统性能。

🍊 使用Demo

🎉 基础概念

📝 Reactor 模式

Reactor模式是一种基于事件驱动的异步编程模型,它允许程序以非阻塞的方式处理事件。这种模式特别适用于需要处理大量并发事件的场景,如网络通信、消息队列等。

技术原理应用场景优势与局限实际案例
Reactor模式通过使用观察者模式,允许多个观察者订阅事件,并在事件发生时被通知。适用于需要处理大量并发事件的场景,如网络通信、消息队列等。优势:提高系统吞吐量,降低资源消耗;局限:编程模型复杂,需要一定的学习成本。示例:使用Reactor处理网络请求,实现高并发、低延迟的Web服务。
📝 Flux 和 Mono

Flux和Mono是Reactor框架中的两个核心抽象,分别用于处理流式数据和单个数据。

技术原理应用场景优势与局限实际案例
Flux用于处理多个数据项的流式数据,Mono用于处理单个数据项。Flux适用于处理事件流,Mono适用于处理单个事件或值。优势:简化编程模型,提高代码可读性;局限:需要理解Flux和Mono的使用场景。示例:使用Flux处理HTTP请求的响应数据,使用Mono处理数据库查询结果。
📝 背压

背压是一种流量控制机制,用于处理数据流中的数据量超过处理能力的情况。

技术原理应用场景优势与局限实际案例
背压通过限制数据流的速率来防止系统过载,从而提高系统稳定性。适用于处理高并发、大数据量的场景。优势:防止系统过载,提高系统稳定性;局限:需要合理配置背压策略。示例:使用Reactor的背压策略处理WebSocket连接中的数据流。

🎉 创建和发送数据

📝 创建 Flux 和 Mono

创建Flux和Mono是使用Reactor框架的基础操作。

技术原理应用场景优势与局限实际案例
创建Flux和Mono可以通过多种方式实现,如使用create方法创建Flux,使用just方法创建Mono。适用于创建各种类型的数据流。优势:简化数据流创建过程;局限:需要了解不同创建方法的适用场景。示例:使用create方法创建Flux,使用just方法创建Mono。
📝 发送数据

发送数据是Reactor框架的核心功能之一。

技术原理应用场景优势与局限实际案例
发送数据可以通过next方法发送单个数据,使用onNext方法发送多个数据。适用于处理各种类型的数据。优势:简化数据发送过程;局限:需要了解不同发送方法的适用场景。示例:使用next方法发送单个数据,使用onNext方法发送多个数据。

🎉 转换操作

📝 转换操作符

转换操作符用于对Flux和Mono进行转换,如map、flatMap等。

技术原理应用场景优势与局限实际案例
转换操作符可以对数据流进行各种转换操作,如将字符串转换为整数。适用于对数据流进行各种转换操作。优势:简化数据流转换过程;局限:需要了解不同转换操作符的适用场景。示例:使用map操作符将Flux中的字符串转换为整数。
📝 组合操作符

组合操作符用于将多个Flux和Mono进行组合,如merge、zip等。

技术原理应用场景优势与局限实际案例
组合操作符可以将多个数据流合并为一个数据流,如使用merge操作符将多个Flux合并为一个数据流。适用于处理多个数据流。优势:简化数据流组合过程;局限:需要了解不同组合操作符的适用场景。示例:使用merge操作符将多个Flux合并为一个数据流。

🎉 调度器

📝 调度器类型

调度器用于控制Flux和Mono的处理流程。

技术原理应用场景优势与局限实际案例
调度器可以控制Flux和Mono的处理流程,如使用ThreadPoolScheduler处理耗时的任务。适用于处理不同类型的任务。优势:提高系统性能;局限:需要了解不同调度器的适用场景。示例:使用ThreadPoolScheduler处理耗时的任务。
📝 调度器使用

使用调度器发送数据和处理背压是Reactor框架的重要功能。

技术原理应用场景优势与局限实际案例
调度器可以用于发送数据和处理背压,如使用调度器发送数据,处理背压。适用于处理高并发、大数据量的场景。优势:提高系统性能;局限:需要合理配置调度器。示例:使用调度器发送数据,处理背压。

🎉 错误处理

📝 错误处理机制

错误处理机制用于处理Flux和Mono中的错误。

技术原理应用场景优势与局限实际案例
错误处理机制可以通过onErrorResume方法处理错误。适用于处理各种类型的错误。优势:提高系统稳定性;局限:需要了解不同错误处理机制的适用场景。示例:使用onErrorResume方法处理错误。
📝 异常处理

异常处理用于捕获和处理Flux和Mono中的异常。

技术原理应用场景优势与局限实际案例
异常处理可以通过try-catch语句捕获异常。适用于处理各种类型的异常。优势:提高系统稳定性;局限:需要了解不同异常处理机制的适用场景。示例:使用try-catch语句捕获异常。

🎉 实时数据流

📝 WebSockets

WebSockets是一种全双工通信协议,用于实现实时数据传输。

| 技术原理 | 应用场景 | 优势与局限

优快云

博主分享

📥博主的人生感悟和目标

Java程序员廖志伟

📙经过多年在优快云创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。

面试备战资料

八股文备战
场景描述链接
时间充裕(25万字)Java知识点大全(高频面试题)Java知识点大全
时间紧急(15万字)Java高级开发高频面试题Java高级开发高频面试题

理论知识专题(图文并茂,字数过万)

技术栈链接
RocketMQRocketMQ详解
KafkaKafka详解
RabbitMQRabbitMQ详解
MongoDBMongoDB详解
ElasticSearchElasticSearch详解
ZookeeperZookeeper详解
RedisRedis详解
MySQLMySQL详解
JVMJVM详解

集群部署(图文并茂,字数过万)

技术栈部署架构链接
MySQL使用Docker-Compose部署MySQL一主二从半同步复制高可用MHA集群Docker-Compose部署教程
Redis三主三从集群(三种方式部署/18个节点的Redis Cluster模式)三种部署方式教程
RocketMQDLedger高可用集群(9节点)部署指南
Nacos+Nginx集群+负载均衡(9节点)Docker部署方案
Kubernetes容器编排安装最全安装教程

开源项目分享

项目名称链接地址
高并发红包雨项目https://gitee.com/java_wxid/red-packet-rain
微服务技术集成demo项目https://gitee.com/java_wxid/java_wxid

管理经验

【公司管理与研发流程优化】针对研发流程、需求管理、沟通协作、文档建设、绩效考核等问题的综合解决方案:https://download.youkuaiyun.com/download/java_wxid/91148718

希望各位读者朋友能够多多支持!

现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!

🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~

Spring AI流式输出与打字机效果实战:从SSE到响应式编程 流式输出是提升AI应用交互体验的核心技术,它通过实时推送AI模型生成的内容片段,实现了类似人类对话的渐进式响应。其原理基于服务器推送技术,如SSE(Server-Sent Events),结合响应式编程模型,将AI生成过程转化为持续的数据流。这项技术的价值在于显著降低用户等待焦虑,优化资源利用,并为实时交互场景奠定基础。在Spring AI框架中,通过StreamingChatClient与Flux流的配合,开发者可以高效构建流式对话功能。本文聚焦于如何实现流式输出并搭配打字机效果,通过前后端完整示例,展示 阅读详情

相关推荐

AgentScope Java 2.0- 核心原理深度解析:从架构设计到ReAct引擎,一文读懂阿里开源智能体框架

本文从源码层面深度解析AgentScope Java 2.0核心原理,涵盖分层架构(应用层-框架层-扩展层-基础设施层)、ReAct推理引擎的实现机制、Msg消息系统的设计、DashScope/Ollama模型提供者架构、@Tool注解驱动工具系统与ToolGroup动态激活、会话记忆与长期记忆两级记忆体系、MCP与A2A双协议集成、基于Project Reactor的响应式编程模型、AgentScope Runtime安全沙箱机制以及OpenTelemetry可观测性体系。

program哲学 343

【Java开发】 Spring 05 :Project Reactor 响应式流框架(以Reactive方式访问Redis为例)

希望用少量、有限个数的线程来满足高负载的需要。IO阻塞浪费系统性能,只有纯异步处理才能发挥系统的全部性能。介绍一下最重要的两个类,可能单纯的介绍会让大家觉得云里雾里,但是看到后边 Redis 的实践内容就会恍然大悟了。Reactor 有两个核心类:Flux和Mono,这两个类都实现 Publisher 接口。Flux 可以触发零到多个事件,并根据实际情况结束处理或触发错误。Mono 最多只触发一个事件,所以可以把 Mono 用于在异步任务完成时发出通知。简单来说,Mono

尹煜的博客 4034

数字IC后端时钟树综合实战:OCC电路优化与时钟树平衡策略

本文深入探讨了数字IC后端设计中时钟树综合的关键挑战,重点分析了OCC电路时钟树优化的必要性。通过实战案例,详细阐述了如何通过手动干预、时钟分组与分段长树等策略,避免工具自动平衡导致的时序违例和资源浪费,从而有效实现时钟树平衡并提升设计质量。

weixin_29306261的博客 331

project reactor 项目实战

项目中的rpc通过reactor-netty编写,未使用webflux自带的webClient,有以下几个原因自带的WebClient使用的是http协议,对于rpc场景冗余的信息比较多,没必要(当然它比较成熟)使用reactor-netty练练手,虽然简陋,但是收获多(主要原因…)这里先贴一下reactor-netty的官网,reactor-netty是对netty的完整reactor实践本文写的还是有些仓促,有一些点表述的不是很好,还请读者见谅,后续我再改改~

HeiheiChihiro的博客 1736

LIO-SAM编译ubuntu20.04 Noetic

一、下载二、编译&&解决报错报错如下。

Kenneth666888的博客 689

江科大笔记—OLED调试工具

OLED介绍及调试工具

m0_62005595的博客 663

Spring Project Reactor从入门到放弃

reactor是一个基于reactive streams的响应式编程框架。在了解project reactor 项目之前, 你需要熟悉观察者模式(订阅发布模式)和reactive streams。只有了解了这些内容,才能更好的开始project reactor的学习。你可以通过看和了简单学习这两个知识点。

很多时候犯错都是在不知情的情况下发生的 1074

Tesla V100 Windows 部署实战:从驱动安装到模式切换的避坑指南

本文是一份详细的Tesla V100在Windows系统下的部署实战指南。文章从硬件组装、系统选择讲起,重点阐述了驱动安装的正确方法,并深入剖析了将计算卡从TCC模式切换至WDDM模式的诱惑与潜在陷阱。最终,作者推荐保持默认TCC模式,并提供了使用nvidia-smi命令行等稳定可靠的显卡监控方案,旨在帮助用户避开常见坑点,高效利用这张专业计算卡进行AI计算等任务。

java5的博客 1712

Project Reactor 响应式编程

前面提到的 RxJava 库是 JVM 上反应式编程的先驱,也是反应式流规范的基础。RxJava 2 在 RxJava 的基础上做了很多的更新。不过 RxJava 库也有其不足的地方。RxJava 产生于反应式流规范之前,虽然可以和反应式流的接口进行转换,但是由于底层实现的原因,使用起来并不是很直观。RxJava 2 在设计和实现时考虑到了与规范的整合,不过为了保持与 RxJava 的兼容性,很多地方在使用时也并不直观。

weixin_43866408的博客 1674

从零到一:用CubeMX和485模块快速上手多摩川绝对式编码器(附清零操作详解)

本文详细介绍了如何使用STM32CubeMX和485模块快速上手多摩川绝对式编码器,包括硬件连接、STM32配置、协议解析及清零操作。通过具体的代码示例和调试技巧,帮助开发者高效实现编码器数据读取和清零功能,特别适合STM32单片机开发者参考。

weixin_30599769的博客 193

2025美赛E题为农业留出空间(附代码+全保姆教程)Making Room for Agriculture

有机农业的核心在于减少化学投入,促进自然控制和可持续性。变量定义CCC: 作物种群III: 害虫种群PPP: 天然捕食者种群(蝙蝠、鸟类等)BBB: 生物多样性水平(以种类数量表示)SSS: 土壤健康指数(影响植物繁殖与作物生长)EEE: 农业生态系统的整体稳定性。

博客 1496

Reactive编程入门:Project Reactor 深度指南

Project Reactor 是一个基于 Reactive Streams 规范的响应式编程库,为Java提供了强大的异步数据流处理能力。本节将深入探讨 Reactor 的核心组件 Flux 和 Mono,并通过丰富示例展示如何构建响应式应用。通过掌握这些核心概念和操作符,您已经具备了构建复杂响应式系统的基础能力。Reactor 的强大之处在于其丰富的操作符可以组合出几乎无限的数据处理管道,同时保持代码的声明式和简洁性。

百锦再的博客 1万+

FastAPI基础项目:仿头条新闻的web项目,实现基本的新闻列表页和详情页查看功能

该项目是一个基于FastAPI和MySQL的新闻应用入门项目。主要包含新闻列表页和详情页两个功能页面。项目结构清晰,包含主应用文件、数据库脚本和HTML模板。使用SQLAlchemy进行数据库操作,通过脚本可自动生成50条示例新闻数据。环境配置简单,仅需安装FastAPI、MySQL驱动等基础依赖,通过.env文件管理数据库连接。该项目适合作为FastAPI+MySQL的入门学习案例,展示了基本的CRUD操作、分页查询和模板渲染功能。

数据知道的博客 4429

React编程模型:Project Reactor深度解析

在当前线程立即执行通常用于测试或不需要异步的场景使用单个可重用的线程适用于低延迟的轻量级任务所有调用者共享同一个线程无限扩展的线程池适合阻塞I/O操作每个新任务可能创建新线程有界的弹性线程池默认最多创建10 * CPU核心数的线程适合阻塞I/O操作比elastic更可控,避免资源耗尽固定大小的并行线程池默认大小等于CPU核心数适合计算密集型任务从现有的ExecutorService创建允许与现有线程池集成Mono。

百锦再的博客 1万+

TC3XX - MCAL知识点(三十五):Tasking编译器下,Tc3xx的MCAL代码如何使用多核,多核中断、多核任务、多核外设之间的MCAL配置与代码例程

文章用于记录在裸机情况下使用多核Tc387芯片,如何高效运行以及正确的代码、工程属性、链接文件配置等问题,相互结合、相互影响的地方,以示后续使用记录。

梦想技术家 963

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

React编程模型:React Streams规范详解

React Streams规范是响应式编程领域的一项重要标准,它为异步流处理提供了统一的接口和语义。这套规范最初由Reactive Streams组织制定,后来被纳入Java 9的java.util.concurrent.Flow API中,并成为响应式编程库如Project Reactor、RxJava等的基础。React Streams规范的核心目标是解决背压(Backpressure)问题,即在生产者(Publisher)和消费者(Subscriber)之间平衡数据流速的机制。

百锦再的博客 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

React响应式流背压实践:微信群发引擎从线程池到Project Reactor的重构记录

响应式编程中的背压(Backpressure)是一种上下游速率协调机制,其核心原理是下游通过request(n)控制上游生产节奏,避免无界生产导致内存溢出或外部接口被压垮。在依赖外部API的批量任务场景中,线程池加静态队列无法感知下游的真实承载能力,而Project Reactor通过limitRate、flatMap并发窗口、缓冲策略等操作符,将背压控制显式化。本文从一次微信群发事故出发,分析生产消费速率差异带来的工程问题,并落地到React响应式流技术栈,给出消息引擎中并发窗口估算、高低水位设置、重试防

weixin_30522983的博客 272

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

一文读懂“rea“:响应式编程、React生态与read-eval-apply

在技术交流中,简短缩写如"rea"往往承载多重含义,给开发者带来理解上的困惑。它可能指代响应式编程领域的Project Reactor,也可能代表React技术栈中的相关实践,甚至表示数据处理场景下的read-eval-apply循环。从底层原理看,这三种方向分别对应异步非阻塞架构、组件化状态管理与规则驱动处理,均在现代软件开发中扮演关键角色。本文结合工程实践,深入剖析它们的核心概念、典型应用场景、常见陷阱与选型权衡,帮助开发者根据自身技术方向快速定位并落地。无论你是Java后端、前端工程师还是数据管道开发

weixin_29895109的博客 211

【开箱即用】锤子解密器上手:IC卡判断系统怎么用

锤子解密器是一款IC卡判断系统程序,任务很单一:帮你完成IC卡的解密和信息判断,从拿到文件到跑起来只有两步。 ## 它到底能做什么 它能对IC卡做解密与判断。你把卡交给它,它负责识别并处理卡内信息,最后给出判断结果。适合你手头有IC卡要确认内容、又不太想手动折腾的场景,省掉逐字段核对的功夫。 ## IC卡判断系统怎么用:拿到手怎么跑起来 1. 下载并解压压缩包,得到里面的程序文件。 2.

gitblog_01077的博客 455

Spring AI响应式Agent实战:从ReAct到ReactAgent的跃迁

响应式编程以异步非阻塞和事件驱动为核心,通过Project Reactor的Mono与Flux模型,将线程从I/O等待中解放出来,从而显著提升系统并发吞吐能力。在构建高并发AI应用时,传统同步调用容易导致线程阻塞和资源浪费,尤其当Agent需要多次调用模型与工具时,阻塞模型的瓶颈更加突出。WebFlux作为响应式技术栈的工程实现,为流式输出、背压处理和弹性调度提供了原生支持。本文结合Spring AI的ReactiveChatClient与ReAct推理循环,设计并实现了一个名为ReactAgent的响应式

weixin_33585822的博客 179

Reactor 反应式编程实用指南(三)

本章重点介绍了 Reactor Streams 的测试和调试。测试 Reactor Flux/Mono 流是复杂的,因为每个流都是以异步方式懒加载评估的。我们还研究了,它可以单独验证单个步骤。接下来,我们研究了虚拟时钟来验证时间敏感的操作,例如延迟。我们还研究了用于验证发布者最终状态的实用工具。然后,为了对反应式操作符和流业务逻辑进行单元测试,我们使用了进行存根。下一节是关于调试 Reactor Streams 以获取更多关于底层处理的了解。调试 Reactor 流是复杂的,因为操作符是以异步方式评估的。

龙哥盟 473

基于响应式编程的Java AI Agent框架:AgentFlux实践解析

响应式编程是处理高并发、流式数据交互的经典范式,其核心在于通过背压机制协调生产者和消费者速度,避免资源耗尽。在Java生态中,Project Reactor和WebFlux为构建非阻塞链路提供了成熟基础,而Java 25的虚拟线程则补充了阻塞型SDK的适配方案。当AI Agent涉及多轮工具调用、SSE流式输出和实时状态回放时,传统阻塞模型会因线程占用和延迟累积而难以支撑。响应式架构通过事件流编排、背压控制及异步持久化,天然契合Agent的流式特性,能够以极低线程开销实现高并发交互。本文从响应式编程原理出发

weixin_30983353的博客 72

SpringBoot响应式编程在企业门户网站中的实践

响应式编程是一种基于异步数据流的编程范式,其核心原理是通过非阻塞IO和事件驱动机制提升系统吞吐量。在Java生态中,SpringBoot通过WebFlux模块实现了响应式支持,结合Reactor库提供背压控制能力。这种技术特别适合需要处理高并发请求的企业级应用,如电商平台、实时数据监控系统等场景。本文以企业门户网站开发为例,详细解析如何通过SpringBoot响应式技术栈实现多终端自适应、弹性数据流处理等核心需求。项目中采用的WebFlux+Reactive MongoDB组合,在3000+ QPS压力测试

weixin_34199335的博客 299

spring react_使用Spring WebFlux构建React性REST API –第2部分

spring react 在上一篇文章的续篇中,我们将看到React式流规范及其实现之一,称为Project Reactor 。 React流规范定义了以下接口。 让我们看看这些接口的细节。 发布者→发布者是潜在数量不受限制的序列元素的提供者,可按其订阅者的要求发布它们 public interface Publisher<T> { public void subsc...

最佳 Java 编程 525

ReActAgent 源码深度拆解:从调用入口到 ReAct-Loop,读懂智能体 “推理 - 行动” 范式

ReActAgent是AgentScope框架中基于ReAct“推理-行动”范式实现的核心智能体,本文围绕其基础使用与核心源码展开拆解分析。以call方法为入口,逐步梳理AgentBase中call方法的执行链路,重点剖析钩子系统、可观测性体系、ReAct-Loop核心循环三大核心模块的实现逻辑与价值。钩子系统基于事件驱动实现全流程可扩展,可观测性体系通过Tracer接口与TracerRegistry解决异步追踪痛点,ReAct-Loop则实现“推理-行动”的闭环迭代。

qq_74092815的博客 1238

react 解构后加入数组_项目React堆–解构元组

react 解构后加入数组 元组是简单的数据结构,其中包含一组固定的项目,每个项目具有不同的数据类型。 Project Reactor提供了可容纳大约8种不同类型的元组数据结构 。 元组非常有用,但是使用元组的问题之一是,要在不使用它们的每个位置对其进行结构分解的情况下,很难弄清它们的内容。 问题 考虑一个简单的运算符,该运算符以这种方式将字符串和整数压缩在一起: Mono&lt...

906
上一篇: MySQL触发器深度解析
下一篇: 六边形架构:软件设计的未来之道
Java开发廖志伟
博客等级 码龄2年 3491粉丝 1534原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值