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

Spark Core 源码关键环节的深度解析

以下是对 Spark Core 源码关键环节的深度解析,包括核心组件启动与调度机制、Shuffle与调度系统、RDD高级机制。每个环节都细化到具体方法、逻辑、源码片段,附有流程图思路与速记口诀,便于记忆和理解。


一、核心组件启动与调度机制

1. RpcEnv 原理

作用:Spark 分布式组件间消息通信的基础抽象。
实现:支持 Akka(老版)、Netty(主流)。

关键类/方法

  • RpcEnv:抽象通信环境。
  • NettyRpcEnv:主流实现。
  • RpcEndpoint:消息接收者。
  • RpcEndpointRef:消息发送者引用。

源码片段(NettyRpcEnv 初始化):

// 创建 RpcEnv
val rpcEnv = new NettyRpcEnv(conf, name, bindAddress, advertiseAddress, port, securityManager, clientMode)

流程图思路

  1. 创建 RpcEnv
  2. 注册 RpcEndpoint
  3. EndpointRef 发送消息
  4. 消息被分发到 Endpoint

口诀
「Env搭桥,Endpoint通信,Ref发消息,Netty收听」


2. Standalone Master 启动流程

主类Master
入口Master.main(args)Master.startRpcEnvAndEndpoint

关键步骤

  1. 创建 SparkConf
  2. 创建 RpcEnv(NettyRpcEnv)
  3. 启动 MasterEndpoint(负责调度和资源管理)
  4. 监听端口,等待 Worker/Driver 注册

源码片段

val (rpcEnv, _, _) = Master.startRpcEnvAndEndpoint(args, conf)

流程图思路

  • main → SparkConf → NettyRpcEnv → MasterEndpoint → 等待注册

口诀
「Master起飞,Env先备,Endpoint就位,注册才对」


3. Worker 启动

主类Worker
入口Worker.main(args)Worker.startRpcEnvAndEndpoint

关键步骤

  1. 创建 SparkConf
  2. 创建 RpcEnv
  3. 启动 WorkerEndpoint,连接 Master 进行注册
  4. 资源上报,等待任务分配

源码片段

val (rpcEnv, _, _) = Worker.startRpcEnvAndEndpoint(args, conf)

流程图思路

  • main → SparkConf → NettyRpcEnv → WorkerEndpoint → 注册到 Master

口诀
「Worker启动,Env先行,Endpoint注册,资源上供」


4. SparkSubmit 提交流程

主类SparkSubmit
入口SparkSubmit.main(args)

关键步骤

  1. 解析参数,封装为 SparkSubmitArguments
  2. 选择对应部署模式(Standalone/Yarn/Mesos)
  3. 构造并启动 Driver(本地或集群)

源码片段

val appArgs = new SparkSubmitArguments(args)
appArgs.action match {case SparkSubmitAction.SUBMIT => submit(appArgs)...
}

流程图思路

  • main → 解析参数 → 选择模式 → 启动 Driver

口诀
「Submit解析,模式选定,Driver启动,任务约定」


5. Driver 启动机制

主类Driver(实际就是用户程序)

关键步骤

  1. 初始化 SparkContext
  2. 向 Master 注册 Application
  3. 启动 TaskScheduler/DAGScheduler
  4. 等待资源分配,提交任务

源码片段

val sc = new SparkContext(conf)

流程图思路

  • 用户代码 → SparkContext → 注册 Application → 调度器就绪

口诀
「Driver上线,Context先建,注册申报,调度开干」


6. Application 注册

关键流程

  • Driver 中 SparkContext 向 Master 注册 Application
  • 通过 RpcEnv 发送 RegisterApplication 消息
  • Master 记录 Application 信息,分配 ApplicationId

源码片段

masterEndpoint.ask[RegisterApplicationResponse](RegisterApplication(...))

流程图思路

  • SparkContext → RegisterApplication → Master → ApplicationId

口诀
「App先注册,Master记名,分配ID,资源分明」


7. Executor 生命周期

关键流程

  1. Worker 启动 Executor
  2. Executor 注册到 Driver
  3. Executor 拉取任务并执行
  4. 任务完成后结果返回
  5. Executor 挂掉或被回收

源码片段

// Worker 启动 Executor
val executor = new ExecutorRunner(...)
executor.start()

流程图思路

  • Worker → 启动 Executor → 注册 Driver → 执行任务 → 上报结果

口诀
「Worker派遣,Executor上场,注册拉活,任务收场」


二、Shuffle 与调度系统

1. ShuffleReader 原理

作用:Task 拉取上游的 Shuffle 数据。

关键类/方法

  • ShuffleReader
  • BlockStoreShuffleReader
  • IndexShuffleBlockResolver

源码片段

val reader = new BlockStoreShuffleReader(...)
reader.read()

流程图思路

  • Task → ShuffleReader → Index文件定位 → 拉取数据块

口诀
「Reader找索引,数据块定位,拉取无忧,结果送呈」


2. ShuffleTracker 机制

作用:管理 Shuffle 元数据,跟踪 Shuffle 状态。

关键类/方法

  • MapOutputTrackerMaster
  • MapOutputTrackerWorker

源码片段

tracker.getMapSizesByExecutorId(shuffleId, startPartition, endPartition)

流程图思路

  • Master 记录 Map 输出
  • Worker 查询 Map 位置
  • 拉取数据

口诀
「Master登记,Worker查询,位置明了,数据随行」


3. 调度器Scheduler完整调度流程

关键类/方法

  • DAGScheduler
  • TaskSchedulerImpl

流程

  1. RDD action 触发 job 提交
  2. DAGScheduler 划分 Stage
  3. 提交 Stage,生成 TaskSet
  4. TaskSchedulerImpl 调度 TaskSet
  5. Executor 拉任务执行

源码片段

// DAGScheduler 提交 job
submitJob(rdd, func, partitions, callSite, resultHandler, properties)

流程图思路

  • action → DAGScheduler → Stage划分 → TaskSet → TaskScheduler → Executor

口诀
「Action触发,DAG分割,Task成组,Executor拿货」


三、RDD高级机制

1. RDD 持久化

作用:缓存中间结果,减少重复计算。

关键类/方法

  • RDD.persist()
  • RDD.cache()
  • RDD.computeOrReadCheckpoint()

源码片段

rdd.persist(StorageLevel.MEMORY_ONLY)

流程图思路

  • 调用 persist → 标记 StorageLevel → Executor 缓存数据

口诀
「Persist标记,Level定级,Executor存,重用高效」


2. 检查点机制

作用:将 RDD 结果持久化到外部存储,断开血缘,容错恢复。

关键类/方法

  • RDD.checkpoint()
  • RDD.isCheckpointed

源码片段

rdd.checkpoint()

流程图思路

  • 标记 checkpoint → Job 触发 → 结果写到 HDFS → 更新血缘

口诀
「Checkpoint标,执行写盘,血缘断裂,故障无难」


3. 广播变量

作用:全局只读变量,分发到每个 Executor。

关键类/方法

  • SparkContext.broadcast(value)
  • Broadcast[T]

源码片段

val bc = sc.broadcast(Array(1,2,3))

流程图思路

  • Driver注册变量 → Executor 拉取

口诀
「广播Driver发,Executor自取,变量全局,效率无虑」


4. 累加器

作用:分布式聚合写变量,只能累加,不能读。

关键类/方法

  • SparkContext.longAccumulator
  • AccumulatorV2

源码片段

val acc = sc.longAccumulator("myAcc")
rdd.foreach(x => acc.add(x))

流程图思路

  • Driver 注册 → Task 分发累加 → Driver 汇总

口诀
「累加驱动创,Task分布加,结果Driver收,聚合无差」


附:整体流程图思路

SparkSubmit↓
Driver (SparkContext)↓
注册 Application → Master↓
Master 分配资源 → Worker 启动 Executor↓
Executor 注册 Driver↓
DAGScheduler 划分 Stage → TaskScheduler 提交 TaskSet↓
Executor 拉取任务 → RDD 计算 → Shuffle 读写↓
结果返回 Driver

速记口诀总览

  • RpcEnv:「Env搭桥,Endpoint通信,Ref发消息,Netty收听」
  • Master:「Master起飞,Env先备,Endpoint就位,注册才对」
  • Worker:「Worker启动,Env先行,Endpoint注册,资源上供」
  • SparkSubmit:「Submit解析,模式选定,Driver启动,任务约定」
  • Driver:「Driver上线,Context先建,注册申报,调度开干」
  • Application:「App先注册,Master记名,分配ID,资源分明」
  • Executor:「Worker派遣,Executor上场,注册拉活,任务收场」
  • ShuffleReader:「Reader找索引,数据块定位,拉取无忧,结果送呈」
  • ShuffleTracker:「Master登记,Worker查询,位置明了,数据随行」
  • Scheduler:「Action触发,DAG分割,Task成组,Executor拿货」
  • RDD持久化:「Persist标记,Level定级,Executor存,重用高效」
  • 检查点:「Checkpoint标,执行写盘,血缘断裂,故障无难」
  • 广播变量:「广播Driver发,Executor自取,变量全局,效率无虑」
  • 累加器:「累加驱动创,Task分布加,结果Driver收,聚合无差」

如需进一步细化某个组件的源码细节、类图、时序图等,请告知!

相关文章:

Spark Core 源码关键环节的深度解析

以下是对 Spark Core 源码关键环节的深度解析,包括核心组件启动与调度机制、Shuffle与调度系统、RDD高级机制。每个环节都细化到具体方法、逻辑、源码片段,附有流程图思路与速记口诀,便于记忆和理解。 一、核心组件启动与调度机制 1. RpcEnv…...

net Core》》包与库 LibMan、NPM

LibMan 资料 NPM 资料 在 Visual Studio 中使用 npm package.json 保存之后 vs会自动下载的。 注意:如果您没有看到 node_modules 文件夹,请确保在 Visual Studio 解决方案资源管理器中启用了“显示所有文件”选项 要卸载该库,您只需从 …...

数学建模,机器决策人建模

目录 数学建模 微分方程 动态系统建模 时间序列分析 概述 指数衰减 随机漂移 总结 曲线拟合 最优化方法 梯度下降法 概率建模(如贝叶斯建模、马尔可夫过程、MDP/POMDP) 等 贝叶斯建模 贝叶斯定理 优势 马尔可夫过程 马尔可夫过程的分类…...

FFmpeg中使用Android Content协议打开文件设备

引言 随着Android 10引入的Scoped Storage(分区存储)机制,传统的文件访问方式发生了重大变化。FFmpeg作为强大的多媒体处理工具,也在不断适应Android平台的演进。本文将介绍如何在FFmpeg 7.0版本中使用Android content协议直接访…...

SQL查询, 响应体临时字段报: Unknown column ‘data_json_map‘ in ‘field list‘

Overridepublic AjaxResult list(AgentPageReqVO pageReqVO, Integer pageNo, Integer pageSize) {// 1. 查询数据库获取代理列表List<AgentDO> list agentMapper.selectPage(pageReqVO).getList();// 如果结果为空&#xff0c;直接返回空分页结果if (CollectionUtils.i…...

OpenCv高阶(十四)——LBPH人脸识别

文章目录 前言一、LBPH原理1. LBP&#xff08;局部二值模式&#xff09;特征提取2. 图像分块处理3. 生成直方图4. 人脸识别&#xff08;匹配阶段&#xff09;5. LBPH的特点6. 变种与优化 二、LBPH人脸识别简单实现&#xff08;一&#xff09;LBPH人脸识别1、图像读取&#xff0…...

C#开发利器:SharpBoxesCore全解析

SharpBoxesCore 是一个基于 C# 的开源开发工具库&#xff0c;旨在为开发者提供一系列常用功能模块和辅助类&#xff0c;以提高开发效率、减少重复代码编写&#xff0c;并增强项目的可维护性和扩展性。该库集成了多种实用工具类和通用扩展方法&#xff0c;适用于桌面应用、Web 项…...

回表是数据库概念,还是mysql的概念?

主键索引没有列&#xff0c;根据耳机索引去查主键索引&#xff0c;又没有查表&#xff0c;为啥叫回表呢&#xff1f; “回表”这个词&#xff0c;其实算是数据库里的一个通用概念&#xff0c;不过它最常见的应用场景是在 MySQL 的 InnoDB 引擎里&#xff0c;所以很多人一提起回…...

49、c# 能⽤foreach 遍历访问的对象需满足什么条件?

在 C# 中&#xff0c;要使用 foreach 循环遍历一个对象&#xff0c;该对象必须满足以下条件之一&#xff1a; 1. 实现 IEnumerable 或 IEnumerable 接口 非泛型版本&#xff1a;System.Collections.IEnumerable public class MyCollection : IEnumerable {private int[] _da…...

DL00987-基于深度学习YOLOv11的红外鸟类目标检测含完整数据集

提升科研能力&#xff0c;精准识别红外鸟类目标&#xff01; 完整代码数据集见文末 针对科研人员&#xff0c;尤其是研究生们&#xff0c;是否在鸟类目标检测中遇到过数据不够精准、处理困难等问题&#xff1f;现在&#xff0c;我们为你提供一款基于深度学习YOLOv11的红外鸟类…...

07 接口自动化-用例管理框架之pytest单元测试框架

文章目录 一、pytest用例管理框架&#xff08;单元测试框架&#xff09;二、pytest简介三、pytest的最基本的测试用例的规则四、运行方式1.主函数方式2.命令行方式3.通过pytest.ini的配置文件运行 五、pytest 默认执行测试用例的顺序六、跳过测试用例1.无条件跳过 pytest.mark.…...

Flutter 中 build 方法为何写在 StatefulWidget 的 State 类中

Flutter 中 build 方法为何写在 StatefulWidget 的 State 类中 在 Flutter 中&#xff0c;build 方法被设计在 StatefulWidget 的 State 类中而非 StatefulWidget 类本身&#xff0c;这种设计基于几个重要的架构原则和实际考量&#xff1a; 1. 核心设计原因 1.1 生命周期管理…...

多技术栈 iOS 项目的性能调试实战:从 Flutter 到 Unity(含 KeyMob 工具实测)

多技术栈 iOS 项目的性能调试实战&#xff1a;从 Flutter 到 Unity 随着移动端开发日趋多元化&#xff0c;iOS 项目中纯 Objective-C/Swift 已不再是唯一选择。越来越多团队采用 Flutter、React Native、Unity、WebView 混合等方案构建 App。这种“技术栈混合”带来灵活性的同…...

Base64加密解密

Base64 是一种基于 64 个可打印字符来表示二进制数据的编码方式&#xff0c;常用于需要通过文本协议传输二进制数据的场景&#xff08;如 URL、邮件&#xff09;。以下是不同场景下生成 Base64 编码的方法&#xff1a; 一、编程语言实现 Python import base64# 字符串转Base…...

程序设计基础----排序(2)

1、冒泡排序 #include <stdio.h>#define N 1000 int arr[N];/* 对长度为n的数组arr执行冒泡排序 */ void bubbleSort(int arr[], int n);/* 打印长度为n的数组arr */ void printArray(int arr[], int n);void swap(int *xp, int *yp) {int temp *xp;*xp *yp;*yp temp…...

C++:vector容器

vector容器与array容器相似&#xff0c;但vector容器是动态的&#xff0c;可以自动扩容。 使用方法和一些注意如下&#xff1a; #include<iostream> #include<vector> using namespace std;int main() {vector<char> vec { a,b,c,d };vec[4] e;//不能以此…...

十四、Hive 视图 Lateral View

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月20日 专栏&#xff1a;Hive教程 在Hive中&#xff0c;我们经常需要以不同于原始表结构的方式查看或处理数据。为了简化复杂查询、提供数据抽象&#xff0c;以及处理复杂数据类型&#xff08;如数组或Map&#xff09;&#…...

Frp Dockr Mysql内网映射

用 FRP 远程暴露 Mac mini 上的 Docker-MySQL&#xff08;含 Ubuntu frps 安装和 macOS 客户端配置&#xff09; 一、环境说明 服务器&#xff08;公网&#xff09;&#xff1a;Ubuntu 22.04 frps内网设备&#xff1a;macOS (Mac mini) frpc Docker MySQL目标&#xff1a;…...

PHP 扇形的面积(Area of a Circular Sector)

圆形扇区或圆形扇区是圆盘上由两个半径和一个圆弧围成的部分&#xff0c;其中较小的区域称为小扇区&#xff0c;较大的区域称为大扇区。让我们看看这个图&#xff0c;试着找出扇区&#xff1a; 在该图中&#xff0c;绿色阴影部分是扇形&#xff0c;“r”是半径&#xff0c;“th…...

物业后勤小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的物业后勤小程序源码&#xff0c;它为物业管理提供了高效便捷的解决方案。 该源码功能丰富&#xff0c;涵盖房屋认证、家人认证&#xff0c;保障社区居住安全&#xff1b;支持报事报修、装修申请&#xff0c;方便业主与物业沟通&#xff1b;还…...

git基础操作

当远程仓库迁移到一个新的组下面时&#xff0c;你需要在本地仓库中更新远程仓库的URL&#xff0c;以便与新的远程仓库关联。以下是详细步骤&#xff1a; 获取新的远程仓库URL&#xff1a; 首先&#xff0c;你需要从GitLab或相关平台获取新组下的仓库的新URL。通常&#xff0c;仓…...

鸿蒙HarmonyOS 【ArkTS组件】通用属性-背景设置

&#x1f4d1;往期推文全新看点&#xff08;附带最新鸿蒙全栈学习笔记&#xff09; 嵌入式开发适不适合做鸿蒙南向开发&#xff1f;看完这篇你就了解了~ 鸿蒙岗位需求突增&#xff01;移动端、PC端、IoT到底该怎么选&#xff1f; 分享一场鸿蒙开发面试经验记录&#xff08;三面…...

java 在用redis 的时候,如何合理的处理分页问题? redis应当如何存储性能最佳

在 Java 中使用 Redis 处理用户表分页时&#xff0c;需结合其数据结构特性优化存储和查询 1. 数据结构设计 场景需求 用户表字段&#xff1a;id, name, age, register_time&#xff08;注册时间&#xff09;分页要求&#xff1a;按注册时间倒序分页展示&#xff0c;每页 10 条…...

分类预测 | Matlab实现PNN概率神经网络多特征分类预测

分类预测 | Matlab实现PNN概率神经网络多特征分类预测 目录 分类预测 | Matlab实现PNN概率神经网络多特征分类预测分类效果代码功能算法流程程序设计参考资料分类效果 代码功能 该代码实现了一个基于**概率神经网络(PNN)**的多分类任务,核心功能如下: 数据预处理 读取Exce…...

spring-retry

学习链接 【SpringBoot】spring-retry(重试机制) 【Spring】Spring Retry CSDN有点可恶啊&#xff0c;拿着别人的文章&#xff0c;要开VIP才能看...

RTMP协议解析【二】

文章目录 RTMP协议解析【二】RTMP消息消息的格式Basic HeaderMessage HeaderExtended Timestamp RTMP协议解析【二】 本专栏重点负责介绍RTMP协议的理论部分&#xff0c; 跳过定义&#xff0c;协议与其他协议的优缺点对比&#xff0c;协议的拓展与改进&#xff0c;协议的历史发…...

WebGL2混合与雾

混合技术 一、混合基本技术 混合技术就是将两个片元调和&#xff0c;主要通过各种测试将准备进入帧缓冲&#xff08;源片元&#xff09;与帧缓冲中原有片元&#xff08;目标片元&#xff09;按照设定的比例加权计算出最终片元的颜色值 。 两种常用 组合 &#xff1a; 源因子…...

Windows Docker笔记-扩展

docker扩展知识点 开放容器端口 背景&#xff0c;有一个docker Centos7镜像&#xff0c;运行容器后&#xff0c;想要通过22端口远程这个容器 创建容器时开放映射端口&#xff0c;将容器的22端口映射到本地的22端口 docker run -p <宿主机端口>:<容器端口> 镜像名…...

【C++ Primer 学习札记】智能指针

1&#xff09;std::unique_ptr&#xff08;独占所有权&#xff09; 特点&#xff1a; 独占资源的所有权&#xff0c;同一时间只能有一个 unique_ptr 指向特定对象。 不可复制&#xff0c;但可以通过 std::move 转移所有权。 轻量级&#xff0c;几乎无额外开销&#xff08;与…...

【嵌入式人工智能产品开发实战】(二十二)—— 政安晨:改造小智AI开发智能体硬件(案例:移植PowerManager后麦克风不工作)

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 目录 确定你硬件的关键点 案例分析 &#x1f50d; 一、关键代码分析 ✅ 1. power_save_…...

Taro Error: chunk common [mini-css-extract-plugin]

目录 一、问题描述 二、解决方案 一、问题描述 taro项目编译时抛出一下异常&#xff1a; Error: chunk common [mini-css-extract-plugin] Conflicting order. Following module has been added: * css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].oneOf…...

【深度学习】多目标融合算法(六):渐进式分层提取模型PLE(Progressive Layered Extraction)

目录 一、引言 二、PLE&#xff08;Progressive Layered Extraction&#xff0c;渐进式分层提取模型&#xff09; 2.1 技术原理 2.2 技术优缺点 2.3 业务代码实践 2.3.1 业务场景与建模 2.3.2 模型代码实现 2.3.3 模型训练与推理测试 2.3.4 打印模型结构 三、总结 一…...

ping、tcpping、psping、paping、hping的区别

ping、tcpping、psping、paping、hping的区别 这些工具都是用于网络测试的&#xff0c;但它们在功能和协议上有所不同&#xff0c;适用于不同的场景。 ping 基本功能&#xff1a; 发送ICMP echo请求包&#xff0c;并等待接收echo应答包&#xff0c;从而判断网络是否连通&…...

【Redis8】最新安装版与手动运行版

1. 下载 Redis 百度网盘 2. 解压后直接运行 redis-server.exe 3. 使用安装版 双击 install_redis_service.bat 输入安装路径&#xff08;请提前创建好安装路径&#xff09;后直接回车下一步直接回车即可&#xff0c;因为是使用配置模板文件为默认解压出来的&#xff0c;然后…...

前端(小程序)学习笔记(CLASS 1):组件

1、小程序中组件的分类 小程序中的组件也是由宿主环境提供的&#xff0c;开发者可以基于组件快速搭建出漂亮的页面结构。官方把小程序的组件分为了9大类&#xff0c;分别是&#xff1a; * 视图容器&#xff0c;* 基础内容&#xff0c;* 表单组件&#xff0c;* 导航组件 媒体…...

Python MD5加密算法脚本

基本概念 MD5&#xff08;Message Digest Algorithm 5&#xff09;是一种常用的哈希函数&#xff0c;用于将任意长度的数据转换为固定长度的哈希值&#xff0c;通常为128位&#xff08;16字节&#xff09;。 特点 不可逆性&#xff1a;无法从哈希值还原出原始数据。无论原始…...

Python数据分析实战:Pandas高效处理Excel数据指南

目录 引言&#xff1a;为什么选择Pandas处理Excel&#xff1f; 一、环境搭建与数据读取 1.1 基础环境配置 1.2 数据高效载入技巧 二、数据清洗核心战术 三、数据加工实战案例 3.1 销售数据透视分析 3.2 异常值检测 3.3 跨表关联分析 四、性能优化秘籍 4.1 大文件处理…...

使用Starrocks制作拉链表

5月1日向ods_order_info插入3条数据&#xff1a; CREATE TABLE ods_order_info(dt string,id string COMMENT 订单编号,total_amount decimal(10,2) COMMENT 订单金额 ) PRIMARY KEY(dt, id) PARTITION BY (dt) DISTRIBUTED BY HASH(id) PROPERTIES ( "replication_num&q…...

【npm】npm命令大全

掌握 NPM&#xff1a;前端与 Node.js 开发者必备命令大全 NPM (Node Package Manager) 无疑是现代 JavaScript 开发的基石。无论是前端项目还是 Node.js 后端服务&#xff0c;NPM 都扮演着管理依赖、执行脚本、发布模块等关键角色。熟悉并熟练使用 NPM 命令&#xff0c;能够极…...

最新版Chrome浏览器调用ActiveX控件技术——alWebPlugin中间件V2.0.42版发布

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品&#xff0c;致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器&#xff0c;实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…...

32核64G内存的物理机上,Netty理论能承载多少连接?

在 32核64G内存 的机器上&#xff0c;Netty 能承载的连接数取决于 业务场景、配置优化 和 操作系统调优。 以下是详细分析和实测数据参考&#xff1a; 1. 理论估算&#xff08;基于资源限制&#xff09; 资源影响内存每个连接占用 10KB~1MB&#xff08;取决于业务&#xff0…...

对于final、finally和finalize不一样的理解

目录 1、final 1.1、不可变性&#xff08;Immutability&#xff09; 1.2、内存可见性&#xff08;Visibility&#xff09; 1.3、初始化安全&#xff08;Initialization Safety&#xff09; 1.4、禁止重排序&#xff08;Reordering&#xff09; 1、静态常量 2、实例常量 …...

Open CASCADE学习|刚体沿曲线运动实现方法

在三维几何建模中&#xff0c;刚体沿参数化曲线的运动模拟是机械运动仿真、机器人路径规划等领域的核心需求。本文基于Open Cascade几何内核&#xff0c;系统阐述刚体沿曲线运动的实现方法&#xff0c;重点解析标架构建、坐标变换及鲁棒性控制等关键技术。 一、基于标架的刚体运…...

工作流引擎-03-聊一聊什么是流程引擎(Process Engine)?

前言 大家好&#xff0c;我是老马。 最近想设计一款审批系统&#xff0c;于是了解一下关于流程引擎的知识。 下面是一些的流程引擎相关资料。 工作流引擎系列 工作流引擎-00-流程引擎概览 工作流引擎-01-Activiti 是领先的轻量级、以 Java 为中心的开源 BPMN 引擎&#x…...

centos7 p8p1使用ip addr查看时有的时候有两个ip,有的时候只有一个ip,有一个ip快,有一个ip慢

在CentOS 7系统中&#xff0c;网络接口 p8p1 出现IP地址数量变化且访问速度不一致的问题&#xff0c;通常与以下原因相关。以下是逐步排查与解决方案&#xff1a; 1. 检查网络配置文件 可能原因&#xff1a;存在多个配置文件或重复配置&#xff08;如静态IP与DHCP冲突&#xf…...

回溯算法——排列篇

目录 一、全排列 二、全排列II 一、全排列 46. 全排列 - 力扣&#xff08;LeetCode&#xff09; class Solution {List<List<Integer>> resultnew ArrayList<>();LinkedList<Integer> pathnew LinkedList<>();boolean[] used;public List<…...

Unity中SRP Batcher使用整理

SRP Batcher 是一种绘制调用优化,可显著提高使用 SRP 的应用程序的性能,SRP Batcher 减少了Unity为使用相同着色器变体的材质准备和调度绘制调用所需的CPU 时间。 工作原理: 传统优化方法通过减少绘制调用次数提升性能,而SRP Batcher的核心理念在于降低绘制调用间的渲染状…...

【JAVA学习】泛型

传统方法不能对加入到集合ArrayList中的数据类型进行约束&#xff0c;遍历的时候需要进行类型转换&#xff0c;如果集合中的数据量较大&#xff0c;对效率有影响。泛型又称参数化类型&#xff0c;是JDK5.0出现的新特性&#xff0c;解决数据类型的安全性问题&#xff0c;在类声明…...

实验分享|基于千眼狼sCMOS科学相机的流式细胞仪细胞核成像实验

实验背景 流式细胞仪与微流控技术&#xff0c;为细胞及细胞核成像提供新的路径。传统流式细胞仪在细胞核成像检测方面存在检测通量低&#xff0c;荧光信号微弱等局限&#xff0c;故某光学重点实验室开发一种基于高灵敏度sCMOS科学相机并集成在自组荧光显微镜的微流控细胞核成像…...

MySQL中的JSON_CONTAINS函数用法

MySQL中的JSON_CONTAINS函数用于检查一个JSON文档&#xff08;目标&#xff09;是否包含另一个JSON文档&#xff08;搜索值&#xff09;。以下是其详细用法&#xff1a; 函数语法​ JSON_CONTAINS(target_json, search_json [, path]) ​target_json​&#xff1a;要检查的目…...