自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(265)
  • 收藏
  • 关注

原创 工作过程中常用的linux命令

该文章主要用于个人使用,纯粹是个人经验之谈ls //查看当前目录文件ll //查看当前目录文件详细信息,常用于查看权限cd //进入文件夹cat //查看文件vim 创建/查看/修改文件pwd //查看当前目录rm -rf //强制性删除文件及一下文件mkdir 创建目录/文件夹cp a b 把a文件复制到bcp -r a b 把a目录所有文件复制到bmv a b 把a改成b/移动到blsof -i:8080 查看8080端口占用情况kill -9 pid 删掉线程

2020-11-13 15:45:24 725

原创 Spring Boot 实战:@PostConstruct + Caffeine 缓存初始化与定时刷新

自动执行:无需手动调用初始化方法,Spring 容器会自动执行。时机准确:在依赖注入完成后执行,确保所有依赖都已就绪。代码简洁:将初始化逻辑集中在一个方法中,便于维护。通过结合 Caffeine 缓存,我们可以在 Spring Boot 应用中轻松实现高性能的本地缓存。本文的案例展示了如何初始化异步加载缓存,并通过定时任务主动刷新过期数据,确保缓存数据的新鲜度。这种模式适用于配置信息、字典数据、菜单数据等读多写少的场景。

2026-05-22 16:57:11 550

原创 AI 工程 生产级别 向量数据库 Milvus 部署架构&多租户方案&节点流程简单总结

缺点:未索引数据的查询效率较低(O(N)),并且占用 Query Node 内存。因此,Growing Segment 的大小通常有限制,且会尽快触发 Flush 和 Compaction,让 Data Node 构建索引后移交给 Query Node 加载。轮询检查:就像调度中心定时查看生产线上的半成品库存(Growing Segments),看是否达到发货(Flush)或组装(Compaction)标准。未完全索引的增量数据:来自 Streaming Node 的最近写入数据(可能尚未完成索引构建)

2026-02-13 10:54:21 1286 1

原创 AI 工程 生产级别向量数据库Milvus2.6.10性能测试报告

例如,列表中的第一个值可能对应 1 个并发线程的 P99 延迟,第二个值对应 2 个并发线程的 P99 延迟,依此类推。○ 含义: 这是搜索时的参数(通常在搜索 API 的 param 中指定,但在某些配置或测试场景中可能会预先设定或关联)。控制索引构建过程中的探索范围。较大的 efConstruction 值通常能构建出质量更高(连通性更好)的索引,有利于提高搜索质量,但会显著增加索引构建的时间和计算开销。较大的 M 值会增加图的连通性,可能提高搜索精度和召回率,但也会增加内存使用量和索引构建时间。

2026-02-12 15:43:57 1618

原创 AI 工程 K8S pv pvc storeClass(sc) 初认识

*就像你用购物清单(PVC)去领取一个实物(PV),而商店(StorageClass)可以在库存(现有 PV)不足时,根据你的清单去仓库紧急调货或生产(动态创建 PV)。3.动态创建 PV: 长久存在的 longhorn-static StorageClass (由 driver.longhorn.io 驱动) 监听到这些 PVC 的请求,并根据它们的容量和要求,动态创建了相应的 PV。PVC 又通过指定的 StorageClass,触发了 PV 的动态创建和最终的绑定。这是一个完整的、自动化的流程。

2026-02-11 14:43:08 621

原创 小白从 Milvus 开始了解稠密向量、稀疏向量、稠密索引、稀疏索引、混合搜索

在电脑里: 它就是把稠密向量搜索和稀疏向量搜索的结果合并起来,让你可以同时根据“语义意思”(稠密)和“关键词”(稀疏)来查找信息,得到更准确、更全面的结果。比如,你问“一只可爱的猫”,电脑既能理解“猫”的样子(稠密),也能识别“可爱”这个关键词(稀疏),然后给你最好的答案。在电脑里: 它也是一个长长的数字列表,但里面大部分数字都是 0,比如 [0, 0, 0, 5.2, 0, 0, 0, 0, -1.8, …: 专门为稀疏向量设计的倒排索引,利用向量的稀疏性,只索引非零元素,能有效提升搜索性能。

2026-02-06 19:02:48 930

原创 小白从 Milvus 了解索引和 索引类型余弦cos、内积IP 、L2(欧式距离)

追求极致速度和高召回 : 首选 HNSW。内存有限 : 考虑 IVF_SQ8。数据量巨大且想省内存 : 考虑 IVF_PQ 或 DiskANN (如果基于磁盘)。数据量小 (<10w) 且要绝对准确 : 直接用 FLAT。

2026-02-06 18:01:48 1169

原创 JVM G1 CMS 垃圾收集器工作流程简化流程图

Young GC 时,只需扫描 Eden 区 + 被引用的老年代 Region 的 Remembered Set,不用扫整个老年代!如果 A.ref = null 导致 B 只被 C 引用,而 C 本身是活的,CMS 能靠“新增引用”发现 B。💡 所以:CMS 的屏障为“标记正确性”服务,G1 的屏障为“分区效率”服务。🔑 关键区别:G1 要“移动活对象”,CMS 只“释放死对象”。当代码执行 A.ref = B(A 在老年代,B 在老年代),写屏障的作用:当 A(在 R1).ref = B(在 R2)

2026-01-29 10:59:13 699

原创 力扣热题100 20. 有效的括号

简言之:只要遇见右括号,然后和栈中栈顶数据比较,是一对就返回,不是则不对。👉 现在心里记得:先开了圆门,再开了方门(方门是最新的!💡 新题其实变成了:检查每种括号的左、右出现次数是否相等。因为他不知道什么时候关,也不知道关的时候是否匹配。(关门),他查不到!→ 开圆门 → 记在心里(入栈)→ 开方门 → 记在心里(入栈)(开门),他会想:“哦,以后要关。👉 但他心里记得最近开的是方门。👉 他就不知道该配哪个开门动作!这个题目其实是一个阅读理解题,门,应该对应哪个开门动作?” —— 但这没用!

2026-01-28 17:09:19 442

原创 大数据ODS、DWD、DWS、ADS 分层

ODS直接接收来自业务系统、日志、消息队列等的数据,尽量保持原貌,仅做必要的清洗与格式化,保证数据可追溯。特点:数据粒度细、贴近源系统、分为当前数据与历史数据两类,主要作用是隔离业务系统与数仓核心层,减少对源系统的压力。在数据仓库分层架构中,ODS、DWD、DWS、ADS 是最常见的四个核心层级,它们各自承担不同的数据处理与服务职责,形成自下而上的数据加工链路。数据从原始接入到清洗加工,再到主题汇总,最终形成可直接服务业务的应用数据,实现高质量、可维护、可扩展的数据体系。

2026-01-28 10:34:56 470

原创 力扣热题100 15. 三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]输入:nums = [0,1,1]输入:nums = [0,0,0]解释:唯一可能的三元组和为 0。输出:[[0,0,0]]

2026-01-21 15:04:57 76

原创 Docker 镜像打的包有1.3个G 多阶段构建缩小镜像体积(不算成功)

实际的场景:harbor 主备双战,每次拉取的时候拉到备战导致镜像拉取失败,最终排查是因为镜像包太大了,主站在往备战同步的时候失败或者太慢,导致K8s 拉不到镜像。运维建议缩减镜像的大小。: .venv 中的 Lib (准确说是 site-packages )是混合体,但核心涉及系统兼容性的部分是“动态链接库”。Docker 构建时,会按顺序执行每个 FROM 开始的“独立小世界”,最后只保留最后一个 FROM 的结果作为最终镜像。你想做一个干净漂亮的蛋糕(最终镜像),但做蛋糕需要厨房(Builder)。

2026-01-21 11:35:42 766

原创 力扣热题100 11. 盛最多水的容器

前提提要:看懂题目很重要,看懂题目之后就很简单了,用简单的写法先写一遍,超时了然后换思路,如果不会赶紧看题解。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。宽是一直变的,那就控制高,如果高是足够高的,那面积是一定是比低的大。木桶效应,取决于最低的木头,所以挪矮的,让它变高。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。输入:[1,8,6,2,5,4,8,3,7]

2026-01-19 16:27:09 97

原创 java 实体属性 Map 解决 mybatis-plus wrapper selectone 查mysql json类型为null 问题

TableName(autoResultMap = true) 是 MyBatis-Plus(MP) 提供的一个非常关键的注解属性,用于自动为实体类生成内联的 resultMap,从而支持如 typeHandler、association、collection 等复杂映射功能。因为wrapper 无法利用 MyBatis-Plus 的 JacksonTypeHandler 自动映射。但是问题是:content_map 查不到数据,用原生的mybatis 可以正常使用。AI和 网上建议加上。

2026-01-09 17:06:02 433

原创 Java Protobuf+Zstd 压缩存储Redis实践&问题解决&对比Gzip压缩的大小和性能

压缩的大小提升了2倍多,数据写入优化了10%,读取优化了1倍,所以从存储和读写优化的很明显,写入的性能实际并没有提升多少。它在几乎不牺牲解压速度的前提下,显著降低带宽和存储成本,完美契合“中等规模、低频更新、高价值结构化数据”的场景。Zstd:用真空压缩袋仔细打包,体积小很多(比如 20cm × 20cm × 20cm),但打包要 10 秒。LZ4:用普通胶带快速打包,包裹体积大一点(比如 30cm × 30cm × 30cm),打包只要 5 秒。pom.xml (版本可变,因为项目有其他的,所以写死)

2025-12-25 19:12:31 1259

原创 Milvus IllegalAccessError:com.google.protobuf.LazyStringArrayList.emptyList()

milvus-sdk-java和 protobuf-java 版本冲突问题,AI 确实给你了明确的问题出现的原因,但是让你切换的版本是错的,不要过度依赖AI,这是我依旧坚持写博客的原因,所见即所得。之前的版本是3.21.7 导致的报错,Milvus 内部调用了 LazyStringArrayList.emptyList() 方法。但是3.21.7没有,所以改成3.24.0 修复。maven 树如下(Milvus -JAVA的依赖很混乱,大家要格外注意)

2025-12-19 18:32:28 259

原创 java <T> 是什么?

但是泛型中的 T 不是“绑定到某个参数位置”的,而是“代表一个类型”,它可以出现在参数、返回值或方法内部,只要逻辑上需要类型安全和复用。在 Java 中,< T> 和 < Object> 虽然都涉及“类型”,但它们在语义、用途和类型安全性上有本质区别。虽然 JVM 在运行时会类型擦除(把 T 擦成 Object),但在编译期,T 提供了严格的类型约束,而 Object 没有。📌 原则:不要为了“看起来高级”而加泛型。第一个< T>:泛型类型参数(类型变量) T 是一个占位符,代表“调用时确定的具体类型”。

2025-12-12 17:06:17 771

原创 后端认识网关Nginx、LVS 、Keepalived、VIP &&OpenResty、APISIX、 Kong 、 Janus&&Springcloud GateWay

前沿聊天:有没有发现,近几年随着工作的深入,好像除了nginx 最亲切外,什么LVS VIP(跟会员一样) APISIX Kong 还有微服务的GateWay,各种网关层面的名词喋喋不休的出现在你的脑子里。再加上需要增加云服务的鲁棒性,一层套一层,再优化迁移。o(╥﹏╥)o 要老命了,今天就把我知道的一些名词整理一下。

2025-12-11 18:44:45 785

原创 java 项目分层 PO、VO、BO、DTO、DAO、POJO个人项目实践中的见解

当自己建立一个项目的时候,拔剑四顾心茫然,当我在旧的项目里面扒拉屎的时候,脑子混乱。作者现在还没有读DDD领域,但是频繁的遇见这样的问题的时候,说明你已经到时候读读书了(后面看完了,会继续完善该文章的),同时也是和各位看官共勉。一种是基于 DDD(领域驱动设计) 的术语体(VO/DTO/BO/PO/DO),另一种是更偏向 工程实践中的 POJO 分类(vo/query/entity/dto)。发现一个问题,一个人的项目 自己做着做着就为了省事 混着用,多人团体项目,可能从一开始就用错了,大家就将错就错。

2025-12-09 13:58:11 599

原创 java多线程环境下 安全地初始化缓存(避免缓存击穿),同时兼顾性能 的双重检查锁方案

缓存击穿 是指:某个热点 key 在缓存中过期(或不存在)的瞬间,大量并发请求同时发现缓存没有数据,于是全部打到后端数据库(或昂贵服务,如 Milvus、Embedding API)上,导致系统负载骤增甚至崩溃。重复计算 是指:多个线程/请求对同一个输入(如相同的 nodeValue)同时执行相同的昂贵操作(如调用 Embedding 接口、查询 Milvus),而这些操作的结果完全一样,造成资源浪费。实际场景:刚上线,大量请求进行请求,但是缓存并未添加完成,导致重复调用。所以 第二次检查是必须的。

2025-12-08 18:31:18 403

原创 Java GZip 压缩实践 +实践思考 +进一步压榨性能和存储方案思考:Protobuf+ GZip

考虑到GZip是为了压缩数据,减少redis 存储压力,那之前使用过Protobuf和Gzip 有什么差异了,其实这个数据同事真实的测过,gzip 压缩的大小更大,protobuf 压缩的没那么大,但是效果很好。大多是由团队数据同事写入的,根据数据人员提供的信息,当前的redis 数据已经通过Gzip 压缩过了,所以需要我将数据读取,反序列化的时候应该手动转换成String。这说明:Protobuf 负责“高效表示”,压缩算法负责“进一步缩小体积”,两者是互补的。呦西,性能优化了,数据也变小了。

2025-12-04 17:34:14 458

原创 算法题:力扣 热题100道 中等难度128. 最长连续序列

1.这道题其实很有说法,看题目很简单,但是考察的知识点比较细,比较考验逻辑思考能力(就是尼玛难为人,给聪明人写的题)给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。看到 11 → 数:11,12,13 → 长度 3 ❌(重复!不在 → 说明 10 是开头 → 开始数 ✅。看到 10 → 数:10,11,12,13 → 长度 4 ✅(有用)看到 12 → 数:12,13 → 长度 2 ❌(又重复!看到 13 → 数:13 → 长度 1 ❌(完全没必要)

2025-12-04 11:13:54 373

原创 (旧)Spring Securit 实现JWT token认证(多平台登录&部分鉴权)

创建一个线程局部全量 AdminUserHolder.set(principal);放置用户信息,用于每个请求使用。✅ 创建一个 authenticated = true 的 Authentication 对象!1.创建全局安全配置:启用方法级安全(@PreAuthorize 等)5.自定义解析请求,返回当前用户主体;6.用户认证鉴权自定义实体类,类似securtiy 自带的类。通过认证的核心方法,这个方法后,就默认已经认证通过了。集成好的加载用户信息,看诸位看官选择了。3.JWT认证过滤器。

2025-12-02 18:42:41 386

原创 milvus 修改角色限制 unable to create role because the number of roles has reached the limit

https://github.com/milvus-io/milvus/issues/27356 坚定了修改这个配置是成功的,否则我在修改的时候会怀疑人生,因为一直修改不成功。刚开始改的时候maxUserNum 修改直接是成功,所以一直觉得是我们修改的问题,但是实际上,官网好像默认就是100个用户。经过长时间的尝试,重启各个协调器,还有proxy 节点都是失败的。

2025-11-12 19:28:54 325

原创 Setting the NODE_TLS_REJECT_UNAUTHORIZED environment variable to ‘0‘ makes TLS connections and HTTPS

不生效,这说明 Yarn 的证书验证机制没有受到 npm 配置的影响,因为 Yarn 使用自己的配置系统和网络请求逻辑。npm config 对 Yarn 无效。RequestError: unable to verify the first certificate 这个错误表示。在项目中设置 .yarnrc.yml 文件。使用命令 yarn config get。yarn install 报错。windows 环境。

2025-11-04 17:14:13 429

原创 AI 工程: 部署triton inference server backend模型推理服务

Triton Inference Server是一个适用于深度学习与机器学习模型的推理服务引擎,支持将TensorRT、TensorFlow、PyTorch或ONNX等多种AI框架的模型部署为在线推理服务,并支持多模型管理、自定义backend等功能。前提背景:算法想要工程部署模型推理服务,基于之前的AI平台系统调用模型基于当前的请求特征是未embedding 过的,例子: [{a:‘1’}] ,现在需要调研模型推理工具实现 支持当下业务系统调用模型。单GPU、多GPU都可以支持,CPU也支持。

2025-10-21 15:24:12 1010

原创 triton 模型推理 batchSize原理

Triton 把“多个请求”打包成“一个 batch”送给你的模型,但要求你把“一个 batch 的输出”拆成“多个响应”还给客户端。Step 2:Triton 将两个 tensor 沿 batch 维度合并。

2025-10-21 14:07:26 204

原创 triton backend 模式docker 部署 pytorch gpu模型 镜像选择

因为本次安装的是基于 pytorch pth模型,同时需要pytorch 进行数据处理成张量。所以选择 pyt-python-py3。虽然镜像说是提供了pytorch 但是依旧需要下载torch 包,可能是我选择的版本问题吧…确定镜像的版本,否则镜像是不能支持对应的版本的。nvidia的官网 不同版本对应的环境。可以看出 py3 < pyt < llm Py3。我是分开执行,各位可以直接一把启动哈。查看 机器的cuda 和驱动版本。我使用了nohup,避免每次启动。指定后端启动的python 库。

2025-10-21 13:58:47 789

原创 https私人证书 PKIX path building failed 报错解决

tips: 有可能导入后证书,过一段时间后还是会出现这个报错,本人遇到了一次,个人推断是证书文件的问题,因为我把之前的证书重新导入还是会报错,如果重新导入证书,导入,问题解决。另外,同事没有遇到该问题,留下了一个问题:是因为jdk 本身的问题还是因为idea 版本的问题…原因是请求的url不是通用的CA认证,是私人的证书,jvm 识别不出来,需要手动添加该网站的认证。CER和CRT都是用于存储证书的文件扩展名,主要区别在于它们的使用场景和编码格式。路径执行 ,这个时候可以重启idea ,看下请求是否可行。

2025-10-08 09:57:41 541 1

原创 java 方法内部变量重新创建对象:外部的变量未重新赋值 ->可变对象与引用传递

,这并不会影响方法外部对这个对象的引用。,这意味着当你将一个对象传递给一个方法时,你实际上传递的是这个对象在内存中的地址。因此,如果你在方法内部修改了对象的属性,这些修改在方法外部是可见的。4.想要解决这个问题,还是要操作原来的对象,上面的代码实际是想要对原来的对象重新操作,那我直接清空然后再赋值就好了,具体的业务需要具体分析。3.如果方法内部的参数变量 新创建了对象,那这个参数指向的是新的引用地址。当你把一个对象传入方法时,并不是复制整个对象,而是复制这个对象的引用(即内存地址)。

2025-08-25 16:50:37 290

原创 java switch case 如果某个 case 分支没有以 break; 结束,Fall-through行为

这是你看到 case “p4” 执行后还会继续执行 case “p5” 的原因。一旦进入某个匹配的 case 分支(比如 “p4”),就会从那个位置开始顺序执行代码,不再判断后续的 case 条件是否匹配,除非遇到 break;Java 的 switch-case 默认允许 fall-through,也就是说不加 break 就会继续往下执行。如果你希望每个 case 只执行自己对应的逻辑,就必须在每个 case 的最后加上 break;当 type 是 “p4” 时,程序进入 case “p4”。

2025-06-11 16:15:55 525

原创 多线程下使用缓存+锁Lock, 出现“锁失效” + “缓存未命中竞争”的缓存击穿情况,双重检查缓存解决问题

多线程情况下,想通过缓存+同步锁的机制去避免多次重复处理逻辑,尤其是I/0操作,但是在实际的操作过程中发现多次访问的日志。发现问题了,如果finally 及时删除锁,可能会出现下一个线程重新建立锁对象,然后多了查询缓存的性能消耗。这就导致多个线程可能都进入了 lock.lock() 后的代码块,并且都执行了实际查询逻辑。// 可选释放锁对象。当T2 进入的时候处理逻辑,发现没有锁,上锁,访问缓存。当T1 进入的时候处理完逻辑后,放入缓存,然后删除锁。这个可能出现锁失效的情况。为了避免这种情况存在。

2025-06-06 10:42:03 636

原创 RestTemplate 发送的字段第二个大写字母变成小写的问题探究

在使用RestTemplate 发送http 请求的时候,发现nDecisonVar 转换成了ndecisonVar ,但是打印日志用fastjson 打印的没有问题,换成jackson 打印就有问题。作为json 序列化方式,导致的问题,但是为什么出现这个问题呢?一直搜网上,其实也没有个准确的答案而且很多都是错的,所以我就根据我的理解解读一下。实体类使用的Lombok @data 进行的getter setter方法生成,发现lombok 和java bean 的规范有差异。

2025-05-21 19:49:44 503

原创 torch serve部署原理探索

TorchServe 采用的是 基于 Java 服务化框架 + JNI 调用 LibTorch(C++) 的混合架构,而非直接依赖 Python 进程或纯 Java 实现。局限性:对 C++/JNI 的依赖可能增加部署复杂度,需处理跨平台编译问题(如 Linux/Windows 的 .so/.dll 文件)。数据传递到 C++:通过 JNI 将输入数据(如 JSON 或二进制)转换为 LibTorch 张量(torch::Tensor)。热更新:通过 Java 管理模块动态加载/卸载模型,无需重启服务。

2025-04-24 17:59:59 744

原创 工程初探AI模型服务化部署思想

然后对自己而言python web 的就是flask /FastAPI ,然后用torch serve 部署的时候发现是java,作为一个java 工程师,那种暗暗的开心是很难描述的。注意:.pth 和 .pt 文件扩展名通常用于表示保存的模型权重或整个模型的状态字典(state dictionary)。实际上,这两种扩展名没有本质的区别,它们都是用来存储使用 torch.save() 函数保存的模型或者检查点。1.TorchScript:PyTorch 的序列化格式,支持脱离 Python 环境运行。

2025-04-24 17:46:41 988

原创 AI工程pytorch小白TorchServe部署模型服务

由于torch server底层是java ,使用了Log4j2 作为日志框架,运行的代码日志非常乱,所以建议重写log4j2.xml,同时注意,python error 日志被torch server 都处理为了info日志(感觉很奇怪)整体来看,DetectronHandler 类提供了一种将 Detectron2 模型集成到基于 TorchServe的服务中的方式,使得可以通过简单的接口调用来执行对象检测等任务。根据你的应用场景,可能需要对模型的输出进行解码或其他处理,以生成用户友好的输出。

2025-04-24 17:10:27 1630

原创 CompletableFuture 和 List<CompletableFuture> allOf() join() get() 使用经验

不过要注意的是,在这个过程中,CompletableFuture 存在时间损耗,比计数器和线程 耗时久一些,但是为了整体的可控和代码的可维护,在复杂组场景的线程池来讲使用它还是一个相对友好的方案。2.如果不同的CompletableFuture 嵌套在方法里面可以选择将CompletableFuture 放入一个List集合内,然后for 循环依次使用 get/join ,这样的方法同时显得格外的简洁美丽。当你需要详细的异常信息时,可以使用 get(),因为它提供了更具体的异常类型。

2025-04-09 18:31:22 957

原创 java 多线程阻塞主线程 parallelStream || 程序计数器 + 线程池 || CompletableFuture使用性能经验

注:问题3我保持个人建议,如果是复杂的组合类型,或者对性能要求没那么高同时希望能够很方便的管理线程,那使用CompletableFuture 是比较好的,除此之外我还是坚持 计数器+线程池 ,但是要保证计数器能够准确同时能释放,否则就是天塌了。对于简单的并行计算任务,线程池可能表现更好;parallelStream: 在启动和管理线程方面的开销较高,尤其在数据量小的情况下,可能会因为线程管理的开销而导致性能下降。大任务: 对于较大的任务,线程池可能会更高效,因为它可以避免频繁的线程创建和销毁。

2025-04-09 11:14:19 862

原创 springboot 集成ThreadPoolTaskExecutor

ExecutorService 和 ThreadPoolTaskExecutor 都是用于管理和调度线程池的工具,它们在底层都依赖于 Java 的并发库(java.util.concurrent)。通过以上分析和测试,你可以更好地理解 ExecutorService 和 ThreadPoolTaskExecutor 在性能方面的差异,并根据具体需求做出合适的选择。Spring 应用: 推荐使用 ThreadPoolTaskExecutor,因为它提供了更好的集成和便利性,即使有一定的性能开销也是值得的。

2025-04-09 10:17:06 488

原创 milvus线程池获取client报错,解决方案

加个finally 作用是将一个之前从连接池中获取的Milvus客户端实例(searchClient)返回到指定类型的客户端池(在这个例子中为SEARCH类型)。这种模式通常用于资源管理,确保资源能够被有效地重用,并防止资源泄露。

2025-04-03 10:27:38 490

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除