当前位置: 首页 > article >正文

鸿蒙OS 5.0 服务能力框架深入剖析

鸿蒙OS 5.0 服务能力框架中关键类的作用分析

1\. 鸿蒙OS 5.0 服务能力框架导论

鸿蒙OS 5.0,亦称鸿蒙智联 5 1,标志着华为在分布式操作系统领域迈出的重要一步。与早期版本采用兼容安卓的AOSP层、Linux内核以及LiteOS内核不同,鸿蒙OS 5.0 专注于一个统一的微内核架构,旨在提供更强的安全性与更高的性能 1。这种架构的转变对进程间通信机制产生了深远的影响,而进程间通信正是服务能力框架的核心。操作系统的分层架构,从底层的内核层到系统服务层、框架层,再到应用层,为理解服务能力及其相关类在整个系统中的位置提供了基础 3。框架层为开发者提供了创建鸿蒙应用所需的工具,这其中就包含了服务能力框架以及支持多种编程语言的应用程序框架 1。

服务能力(Service Ability,SA)是鸿蒙OS应用的重要组成部分,它与提供用户交互界面的特性能力(Feature Ability,FA)相对应,主要负责处理后台任务并向其他应用或能力提供服务 1。服务能力拥有自身的生命周期,可以被其他能力启动并保持运行,也可以被连接并断开连接,允许多个客户端同时连接到同一个服务能力 5。鉴于服务能力常常需要在不同的进程中运行以实现更好的隔离性和系统稳定性,高效且可靠的进程间通信(Inter-Process Communication,IPC)就显得至关重要 2。在鸿蒙OS 5.0的服务能力框架中,IRemoteBroker、IRemoteStub、IRemoteProxy、IRemoteObject 和 SystemAbility 这五个关键类正是实现和管理这种跨进程通信以及系统级服务的核心组件。理解它们各自的作用以及它们之间的协作方式,对于深入掌握鸿蒙OS 5.0的服务能力开发至关重要。

2\. IRemoteBroker:接口代理人

IRemoteBroker 接口在鸿蒙OS的进程间通信中扮演着至关重要的角色。从本质上讲,它定义了一种契约,用于表示可以被远程访问的对象 6。当一个服务希望将其功能暴露给其他进程时,它会实现一个继承自 IRemoteBroker 的接口。IRemoteBroker 的核心目的是提供一种获取远程对象代理的方式 6。

服务接口通常会继承 IRemoteBroker,这表明该接口定义的方法可以被跨进程调用 6。例如,在代码示例中,IGameInterface 和 ITestAbility 都继承自 IRemoteBroker 6。这种继承关系确保了这些接口遵循鸿蒙OS进程间通信框架的要求,并能够被框架识别和管理为远程服务。一个关键的方法通常与 IRemoteBroker 关联,即 asObject() 7。服务提供者通过实现这个方法返回其自身的 IRemoteObject 实例(通常是 IRemoteStub 的子类),而客户端则通过这个方法获取到远程服务的代理对象 (IRemoteProxy)。因此,IRemoteBroker 不仅是一个标记接口,更重要的是,它提供了一个入口点,使得客户端能够获得与远程服务进行通信的本地代理。

3\. IRemoteStub:服务端的终点

IRemoteStub 是一个抽象基类,它位于服务提供者一侧,负责接收和处理来自远程代理的调用请求 6。当客户端通过 IRemoteProxy 发起一个远程方法调用时,这个请求最终会到达服务端的 IRemoteStub 实例。IRemoteStub 的主要功能在于接收、解封(unmarshalling)来自远程代理的调用请求,并将结果进行封装(marshalling)后返回给远程调用者 7。

IRemoteStub 通常会提供一个关键的抽象方法 OnRemoteRequest() 7。服务开发者需要继承 IRemoteStub 并重写这个方法,以定义如何处理来自不同远程调用的请求。OnRemoteRequest() 方法会接收到调用的代码(transaction code)、包含参数的 MessageParcel 数据包、用于返回结果的 MessageParcel 回复包,以及其他选项 6。在 OnRemoteRequest() 的实现中,开发者需要根据不同的调用代码,从输入的 MessageParcel 中读取参数(解封),然后调用实际的服务实现方法,并将方法的返回值写入到输出的 MessageParcel 中(封装)6。例如,在 GameServiceStub 的代码示例中,onRemoteRequest 方法根据 code 判断是哪个远程方法被调用,然后从 data 中读取参数并执行相应的操作 8。IRemoteStub 的存在极大地简化了服务端处理远程调用的复杂性,它将底层的IPC细节抽象出来,使得开发者可以专注于实现服务的业务逻辑。

4\. IRemoteProxy:客户端的代表

IRemoteProxy 类是客户端在本地持有的远程服务代理,它实现了与服务端相同的服务接口(继承自 IRemoteBroker)6。IRemoteProxy 的作用是作为客户端本地代理,将客户端的方法调用转化为跨进程通信,并处理返回结果 6。当客户端想要调用远程服务的方法时,它实际上是在调用 IRemoteProxy 上的方法。

IRemoteProxy 的关键功能在于拦截客户端的方法调用,并将这些调用转化为可以通过进程间通信发送的消息 6。这个过程包括将方法名和参数封装到 MessageParcel 对象中(marshalling)。IRemoteProxy 内部持有一个 IRemoteObject 的实例,这个 IRemoteObject 代表了远程的服务端对象。当 IRemoteProxy 上的方法被调用时,它会使用这个 IRemoteObject 的 SendRequest() 方法将封装好的消息发送到服务端 6。SendRequest() 方法需要指定调用的代码(通常在服务接口中定义)、包含参数的 MessageParcel、用于接收返回值的 MessageParcel,以及其他选项。在发送请求后,SendRequest() 会等待服务端的响应。一旦收到响应,IRemoteProxy 会从回复的 MessageParcel 中读取返回值(unmarshalling),并将其返回给客户端的调用者 6。例如,在 GameServiceProxy 的代码示例中,action 方法将 deviceId 和 action 参数写入 data,然后通过 remoteObject.sendRequest() 发送到服务端 8。IRemoteProxy 的设计使得客户端能够像调用本地对象一样调用远程服务,而无需关心底层的IPC细节。

5\. IRemoteObject:跨进程的信道

IRemoteObject 接口是鸿蒙OS中跨进程传递的远程对象的抽象表示 8。它的意义在于提供了一个底层的通信机制,使得不同进程中的对象可以相互引用和交互。IRemoteStub 和 IRemoteProxy 实际上都是通过 IRemoteObject 的实例进行通信的 6。

服务端的 IRemoteStub 本身就是一个 IRemoteObject 的实现 8。当一个服务能力被连接时,它的 onConnect() 方法会返回一个 IRemoteObject 实例(通常是 IRemoteStub 的子类)给连接的客户端 10。客户端接收到这个 IRemoteObject 后,会使用它来创建 IRemoteProxy,从而与远程服务进行交互 9。IRemoteObject 提供了一个核心方法 SendRequest(),用于发送IPC消息 6。IRemoteProxy 使用这个方法将封装好的请求发送给服务端的 IRemoteStub。同样,服务端接收到请求后,也会通过 IRemoteObject 将处理结果发送回客户端。IRemoteObject 的抽象性在于它隐藏了底层的进程边界和通信细节,为上层的 IRemoteStub 和 IRemoteProxy 提供了统一的通信接口。

6\. SystemAbility:系统服务的基础

SystemAbility 类在鸿蒙OS中扮演着提供系统级功能和服务的核心角色 11。虽然提供的资料中没有直接给出 SystemAbility 的详细定义,但可以推断出它代表了操作系统中的一个独立功能或服务,例如蓝牙、Wi-Fi 或 NFC 11。SystemAbility 可能是 SystemCapability (SysCap) 的具体实现 11。SystemCapability 描述了操作系统的某种能力,而 SystemAbility 则是提供这些能力的实际组件。

一个 SystemAbility 的生命周期通常包括注册、发布和被其他进程发现和使用的过程。在系统启动时,各种系统服务可能会将自己注册到系统的某个中心管理机构。注册过程可能涉及到为该服务分配一个唯一的标识符。发布是指将该服务的存在和可用性告知其他进程。其他进程可以通过特定的系统API查询和发现已发布的 SystemAbility 实例 12。一旦发现目标 SystemAbility,进程就可以建立与其的连接,并使用其提供的功能。这个连接过程可能涉及到前面讨论的 IRemoteBroker、IRemoteStub、IRemoteProxy 和 IRemoteObject 机制。例如,一个 SystemAbility 可能会实现一个继承自 IRemoteBroker 的接口,并在其 onConnect() 方法中返回一个 IRemoteStub 实例,供客户端通过 IRemoteProxy 进行访问。虽然具体的注册、发布和发现机制在提供的资料中没有详细说明,但可以肯定的是,SystemAbility 是鸿蒙OS提供系统级服务的关键基础设施。

7\. 标准鸿蒙OS 5.0 SA 架构中的相互关系和协同工作方式

在标准的鸿蒙OS 5.0 服务能力架构中,IRemoteBroker、IRemoteStub、IRemoteProxy 和 IRemoteObject 紧密协作,共同实现了高效的跨进程通信。SystemAbility 则作为系统级服务的基础,可能利用这些通信机制向其他进程提供服务。

当一个服务能力(可能是自定义的应用服务,也可能是 SystemAbility)希望被其他进程访问时,它会定义一个继承自 IRemoteBroker 的服务接口。该服务能力的实现类会继承自 IRemoteStub(或者直接继承自 RemoteObject 并实现服务接口)。在服务能力启动并准备好接受连接时,它的 onConnect() 方法会返回一个 IRemoteStub 的实例,这个实例同时也是一个 IRemoteObject 10。

客户端进程想要使用这个服务时,会通过特定的机制(例如,使用 connectAbility() 方法 13)与服务建立连接。连接成功后,客户端会获得一个代表远程服务的 IRemoteObject。为了方便地调用远程服务的方法,客户端通常会使用这个 IRemoteObject 创建一个本地的 IRemoteProxy。这个 IRemoteProxy 实现了与服务端相同的服务接口(继承自 IRemoteBroker)。

现在,当客户端调用 IRemoteProxy 上的一个方法时,IRemoteProxy 会将方法名和参数封装成一个 MessageParcel,然后通过其持有的 IRemoteObject 将这个请求发送到服务端进程。在服务端进程中,IRemoteStub 接收到这个请求,它会解封 MessageParcel 中的参数,并根据请求的标识符(transaction code)调用实际的服务实现方法。服务方法执行完毕后,IRemoteStub 会将结果封装到另一个 MessageParcel 中,并通过相同的 IRemoteObject 发送回客户端进程。客户端进程中的 IRemoteProxy 接收到这个包含结果的 MessageParcel 后,会解封结果并将其返回给客户端的调用者。

下表总结了这五个关键类在鸿蒙OS 5.0 服务能力框架中的角色和主要功能:

表 1: 鸿蒙OS 5.0 服务能力框架中关键类的角色和职责

类名

角色

主要功能

IRemoteBroker

远程接口的契约

定义远程通信的接口规范;提供获取底层 IRemoteObject 或 IRemoteProxy 的方式。

IRemoteStub

服务端请求处理的终点

接收IPC消息,解封参数,调度调用到服务实现,封装结果返回给调用者。

IRemoteProxy

客户端远程服务的本地代理

拦截方法调用,将参数封装成IPC消息,通过 IRemoteObject 发送请求,接收响应,解封结果并返回给客户端。

IRemoteObject

跨进程通信的底层抽象

提供进程间通信的基础通道;被代理用于发送请求,被存根用于接收请求。

SystemAbility

系统级服务的基础

封装并提供系统功能(可能与 SystemCapability 相关);管理其生命周期(注册、发布、发现)。

通过这种精巧的设计,鸿蒙OS 5.0 的服务能力框架实现了高效、安全且易于使用的跨进程通信机制,为构建复杂的分布式应用和管理系统级服务提供了坚实的基础。

8\. 结论

鸿蒙OS 5.0 的服务能力框架依赖于 IRemoteBroker、IRemoteStub、IRemoteProxy 和 IRemoteObject 这四个核心类的紧密协作来实现跨进程通信。IRemoteBroker 作为远程接口的蓝图,定义了服务可以提供的功能。IRemoteStub 充当服务端的消息处理器,负责接收和分发远程调用。IRemoteProxy 则作为客户端的代表,将本地的方法调用转化为远程请求。IRemoteObject 是连接客户端和服务端的桥梁,提供了底层的通信通道。而 SystemAbility 作为系统级服务的基础,很可能也利用了这些机制来向其他进程提供操作系统的核心功能。

这些类的协同工作方式不仅实现了模块化,使得不同的功能可以作为独立的服务运行,而且提高了代码的重用性,因为多个客户端可以连接到同一个服务能力。通过精心设计的封装和解封机制,鸿蒙OS 5.0 实现了高效的跨进程通信,这对于构建复杂的分布式应用和确保系统的稳定性和安全性至关重要。理解这五个关键类的作用及其相互关系,是深入学习和开发鸿蒙OS 5.0 服务能力的关键。

引用的著作

  1. HarmonyOS NEXT \- Wikipedia, 访问时间为 三月 28, 2025, https://en.wikipedia.org/wiki/HarmonyOS\_NEXT

  2. HarmonyOS/README.md at master \- GitHub, 访问时间为 三月 28, 2025, https://github.com/Awesome-HarmonyOS/HarmonyOS/blob/master/README.md

  3. Digging into Harmony OS Internals | by Jasper Morgan | Snapp Mobile \- Medium, 访问时间为 三月 28, 2025, https://medium.com/snapp-mobile/digging-into-harmony-os-internals-fb48d822e65a

  4. Intermediate: Ability Framework in HarmonyOS Part-1 | by Shiddalingeshwar M S \- Medium, 访问时间为 三月 28, 2025, https://shikkerimath.medium.com/intermediate-ability-framework-in-harmonyos-part-1-22a16ba086a8

  5. Service Ability Lifecycle-Service Ability-Ability-Ability Framework ..., 访问时间为 三月 28, 2025, Document

  6. 鸿蒙开发HarmonyOS IPC与RPC通信-腾讯云开发者社区-腾讯云, 访问时间为 三月 28, 2025, 鸿蒙开发HarmonyOS IPC与RPC通信-腾讯云开发者社区-腾讯云

  7. HarmonyOS跨进程通信—IPC与RPC通信开发-华为开发者问答| 华为 ..., 访问时间为 三月 28, 2025, 华为开发者问答 | 华为开发者联盟

  8. \[HarmonyOS\] Part 2—How to connect a Harmony OS app with an ..., 访问时间为 三月 28, 2025, https://www.reddit.com/r/HuaweiDevelopers/comments/nozpmd/harmonyos\_part\_2how\_to\_connect\_a\_harmony\_os\_app/

  9. \[HarmonyOS\] Part 1—How to connect a Harmony OS app with an ..., 访问时间为 三月 28, 2025, https://www.reddit.com/r/Huawei/comments/npocmw/harmonyos\_part\_1how\_to\_connect\_a\_harmony\_os\_app/

  10. Beginner: Service Ability features in Huawei Harmony OS \- HUAWEI Developer Forum, 访问时间为 三月 28, 2025, HUAWEI Developer Forum | HUAWEI Developer

  11. SystemCapability \- Huawei, 访问时间为 三月 28, 2025, Document

  12. Version Overview-HarmonyOS 5.0.1 Release-Release Notes \- HUAWEI Developers, 访问时间为 三月 28, 2025, Document

  13. HarmonyOS API:@ohos.rpc (RPC通信) \- 鸿蒙开发者社区, 访问时间为 三月 28, 2025, HarmonyOS API:@ohos.rpc (RPC通信)-鸿蒙开发者社区-51CTO.COM

相关文章:

鸿蒙OS 5.0 服务能力框架深入剖析

鸿蒙OS 5.0 服务能力框架中关键类的作用分析 1\. 鸿蒙OS 5.0 服务能力框架导论 鸿蒙OS 5.0,亦称鸿蒙智联 5 1,标志着华为在分布式操作系统领域迈出的重要一步。与早期版本采用兼容安卓的AOSP层、Linux内核以及LiteOS内核不同,鸿蒙OS 5.0 专注…...

【PCB工艺】时序图(Timing Diagram)

时序图(Timing Diagram)是描述数字电路信号随时间变化的图示,广泛用于分析和设计时序逻辑电路,如锁存器(Latch)、触发器(Flip-Flop)、计数器、状态机等。这篇文章从时序图的原理、构…...

第四届能源、电力与电气国际学术会议(ICEPET 2025)

重要信息 地点:中国-成都 官网:www.icepet.net(了解参会投稿等信息) 时间:2025年4月25-27日 简介 第四届能源、电力与电气会(ICEPET 2025定于2025年4月25-27日在中国成都举办。 本次将围绕能源、电力及…...

el-table + el-pagination 前端实现分页操作

el-table el-pagination 前端实现分页操作 后端返回全部列表数据&#xff0c;前端进行分页操作 html代码 <div><el-table :data"tableData" border><el-table-column label"序号" type"index" width"50" /><el…...

Redis数据持久化机制 + Go语言读写Redis各种类型值

Redis&#xff08;Remote Dictionary Server&#xff09;作为高性能的键值存储系统&#xff0c;凭借其丰富的数据类型和原子性操作&#xff0c;成为现代分布式系统中不可或缺的组件。 1、Redis支持的数据类型 Redis支持的数据类型可归纳为以下9类&#xff1a; String&#x…...

【机器学习】什么是逻辑回归?

什么是逻辑回归&#xff1f; 逻辑回归&#xff08;Logistic Regression&#xff09;是一个用于分类问题的统计学模型&#xff0c;尽管名字里有“回归”二字&#xff0c;它其实是用来做分类的&#xff0c;不是做数值预测的。 通俗易懂的理解 我们可以通过一个简单的例子来理解…...

Unity程序嵌入Qt后点击UI按钮Button没有反应

一、前言 在一次项目中&#xff0c;需要将Unity程序嵌入qt中&#xff0c;并在主界面显示&#xff0c;根据网络资料与相关代码&#xff0c;成功将unity程序嵌入&#xff0c;但是在点击Unity的Button按钮时却没有响应&#xff0c;在查找相关资料后&#xff0c;解决问题&#xff…...

【Bug】记录2025年遇到的Bug以及修复方案

--------------------------------------------------------分割线 2025.3.25-------------------------------------------------------windows环境下通过命令行终端&#xff08;必须是命令行下&#xff0c;直接赋值传递&#xff0c;代码正常&#xff09;的形式传递字符串时&a…...

2025最新“科研创新与智能化转型“暨AI智能体开发与大语言模型的本地化部署、优化技术实践

第一章、智能体(Agent)入门 1、智能体&#xff08;Agent&#xff09;概述&#xff08;什么是智能体&#xff1f;智能体的类型和应用场景、典型的智能体应用&#xff0c;如&#xff1a;Google Data Science Agent等&#xff09; 2、智能体&#xff08;Agent&#xff09;与大语…...

VUE3+TypeScript项目,使用html2Canvas+jspdf生成PDF并实现--分页--页眉--页尾

使用html2CanvasJsPDF生成pdf&#xff0c;并实现分页添加页眉页尾 1.封装方法htmlToPdfPage.ts /**path: src/utils/htmlToPdfPage.tsname: 导出页面为PDF格式 并添加页眉页尾 **/ /*** 封装思路* 1.将页面根据A4大小分隔边距&#xff0c;避免内容被中间截断* 所有元素层级不要…...

【NLP 46、大模型技术发展】

目录 一、ELMo 2018 训练目标 二、GPT-1 2018 训练目标 三、BERT 2018 训练目标 四、Ernie —— baidu 2019 五、Ernie —— Tsinghua 2019 六、GPT-2 2019 七、UNILM 2019 八、Transformer - XL & XLNet 2019 1.模型结构 Ⅰ、循环机制 Recurrence Mechanism Ⅱ、相对位置…...

在 Ubuntu 上安装 Docker 的完整指南

1. 卸载旧版本(如有) 在安装新版本前,建议先卸载旧版本: sudo apt remove docker docker-engine docker.io containerd runc 2. 安装依赖包 更新软件包索引并安装必要的依赖: sudo apt update sudo apt install -y ca-certificates curl gnupg lsb-release 3. 添加 Do…...

可以把后端的api理解为一个目录地址,但并不准确

将后端的 API 理解为一个“目录地址”是可以的&#xff0c;但并不完全准确。让我们更详细地解释一下。 目录 1、生动形象了解api 2、后端 API 的作用 3、可以将 API 理解为“目录地址”的原因 &#xff08;1&#xff09;URL 路径 &#xff08;2&#xff09;层次结构 4、…...

硬件基础--16_公式梳理

公式梳理 欧姆定律: IU/R 1.欧姆定律有局限性&#xff0c;仅适用于纯电阻电路(或者说纯电阻元器件&#xff0c;纯电阻设备) 2.纯电阻电路:消耗的电能仅转化为热能&#xff0c;没有其他形式的能量转换。 功率计算:PUI 1.导出公式:PU2 /R 2.导出公式:PI2 R 焦耳定律:QI2 Rt 1.导…...

《Python实战进阶》No34:卷积神经网络(CNN)图像分类实战

第34集&#xff1a;卷积神经网络&#xff08;CNN&#xff09;图像分类实战 2025年3月28日更新 增加了 CNN和AI大模型关系的说明。 2025年3月29日更新了代码&#xff0c;优化损失系数曲线可视化。 详细环境配置依赖和可一次性复制的完整代码见文末。 摘要 最近大模型推陈出新迭…...

嵌入式Linux网络编程:UNIX Domain Socket进程间通信(IPC)

嵌入式Linux网络编程&#xff1a;UNIX Domain Socket进程间通信&#xff08;IPC&#xff09; 【本文代码已在Linux平台验证通过】 一、UNIX Domain Socket核心优势 1.1 本地IPC方案对比 特性UNIX Domain Socket管道(Pipe)消息队列(Message Queue)共享内存(Shared Memory)跨进…...

【qt】 布局器

参考博客&#xff1a;https://blog.csdn.net/Fdog_/article/details/107522283 目录 布局管理器概念常见的布局管理器及特点&#x1f535;QHBoxLayout水平布局&#x1f535;QVBoxLayout垂直布局 &#x1f535;QGridLayout网格布局 &#x1f535;QFormLayout表单布局 QT 高级布…...

Hosts文件与DNS的关系:原理、应用场景与安全风险

目录 引言 Hosts文件与DNS的基本概念 2.1 什么是Hosts文件&#xff1f; 2.2 什么是DNS&#xff1f; Hosts文件与DNS的关系 Hosts文件的应用场景 4.1 本地开发与测试 4.2 屏蔽广告与恶意网站 4.3 绕过DNS污染或劫持 Hosts文件的优势 5.1 解析速度快 5.2 不受DNS缓存影…...

VMware Windows Tools 存在认证绕过漏洞(CVE-2025-22230)

漏洞概述 博通公司&#xff08;Broadcom&#xff09;近日修复了 VMware Windows Tools 中存在的一个高危认证绕过漏洞&#xff0c;该漏洞编号为 CVE-2025-22230&#xff08;CVSS 评分为 9.8&#xff09;。VMware Windows Tools 是一套实用程序套件&#xff0c;可提升运行在 VM…...

pnpm 依赖升级终极指南:从语义化版本控制到 Monorepo 全局更新的企业级实践

要使用 pnpm 更新所有依赖包&#xff0c;可以通过以下命令实现&#xff1a; 1. 更新所有依赖到符合语义化版本的范围 pnpm update该命令会根据 package.json 中定义的版本范围&#xff08;如 ^1.0.0 或 ~2.3.4&#xff09;更新依赖包到最新兼容版本&#xff0c;但不会突破版本…...

Sentinel[超详细讲解]-2

异常处理 默认情况下&#xff0c;Sentinel 会抛出 BlockException 异常&#xff0c;如果希望自定义异常&#xff0c;则可以使用 SentinelResource 注解的 blockHandler 属性。 1、自定义异常处理 BlockExceptionHandler 自定义异常处理类实现 BlockExceptionHandler 接口&#…...

【问题解决】Linux安装conda修改~/.bashrc配置文件后,root 用户下显示 -bash-4.2#

问题描述 在Linux安装conda下的python环境时候&#xff0c;修改了~/.bashrc文件&#xff0c;修改完成后&#xff0c;再次进入服务器后&#xff0c;登录时候显示的不是正常的[rootlocalhost ~]#&#xff0c;而是-bash-4.2# 原因分析&#xff1a; 网上原因有&#xff1a;/root下…...

优化webpack打包体积思路

Webpack 打包过大的问题通常会导致页面加载变慢&#xff0c;影响用户体验。可以从代码优化、依赖优化、构建优化等多个角度入手来减少打包体积&#xff1a; 代码优化 &#xff08;1&#xff09;按需加载&#xff08;代码拆分&#xff09; ① 路由懒加载 如果你的项目使用 Vu…...

RabbitMQ 技术详解:异步消息通信的核心原理与实践

这里写目录标题 RabbitMQ 技术详解&#xff1a;异步消息通信的核心原理与实践一、RabbitMQ 本质剖析核心架构组件 二、核心功能与应用场景主要作用典型应用场景 三、工作流程深度解析消息传递流程关键协议机制 四、Java 实现示例1. 依赖配置&#xff08;Maven&#xff09;2. 消…...

CF每日5题Day4(1400)

好困&#xff0c;感觉很累&#xff0c;今天想赶紧写完题早睡。睡眠不足感觉做题都慢了。 1- 1761C 构造 void solve(){int n;cin>>n;vector<vector<int>>a(n1);forr(i,1,n){//保证每个集合不同a[i].push_back(i);}forr(i,1,n){string s;cin>>s;forr(…...

LLM架构解析:NLP基础(第一部分)—— 模型、核心技术与发展历程全解析

本专栏深入探究从循环神经网络&#xff08;RNN&#xff09;到Transformer等自然语言处理&#xff08;NLP&#xff09;模型的架构&#xff0c;以及基于这些模型构建的应用程序。 本系列文章内容&#xff1a; NLP自然语言处理基础&#xff08;本文&#xff09;词嵌入&#xff0…...

k近邻算法K-Nearest Neighbors(KNN)

算法核心 KNN算法的核心思想是“近朱者赤&#xff0c;近墨者黑”。对于一个待分类或预测的样本点&#xff0c;它会查找训练集中与其距离最近的K个样本点&#xff08;即“最近邻”&#xff09;。然后根据这K个最近邻的标签信息来对当前样本进行分类或回归。 在分类任务中&#…...

Dubbo(21)如何配置Dubbo的注册中心?

在分布式系统中&#xff0c;注册中心是一个关键组件&#xff0c;用于服务的注册和发现。Dubbo 支持多种注册中心&#xff0c;包括 ZooKeeper、Nacos、Consul、Etcd 等。下面详细介绍如何配置 Dubbo 的注册中心&#xff0c;以 ZooKeeper 为例。 配置步骤 引入依赖&#xff1a;…...

【Android15 ShellTransitions】(九)结束动画+Android原生ANR问题分析

finishTransition这部分的内容不多&#xff0c;并且我个人的实际工作中很少接触这块&#xff0c;因此我之前都觉得没有必要专门开一篇去分析最后留下的这一丁点儿的动画流程。但是最近碰到了一个google原生ANR问题&#xff0c;正好是和这块相关的&#xff0c;也让我意识到了fin…...

如何让DeepSeek-R1在内网稳定运行并实现随时随地远程在线调用

前言&#xff1a;最近&#xff0c;国产AI圈里的新星——Deepseek&#xff0c;简直是火到不行。但是&#xff0c;你是不是已经对那些千篇一律的手机APP和网页版体验感到腻味了&#xff1f;别急&#xff0c;今天就带你解锁一个超炫的操作&#xff1a;在你的Windows电脑上本地部署…...