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

Flutter 异步编程利器:Future 与 Stream 深度解析

目录

一、Future:处理单次异步操作

1. 概念解读

2. 使用场景

3. 基本用法

3.1 创建 Future

3.2 使用 then 消费 Future

3.3 特性

二、Stream:处理连续异步事件流

1. 概念解读

2. 使用场景

3. 基本用法

3.1 创建 Stream

3.2 监听 Stream

3.3 StreamSubscription 订阅者

 3.4 Stream 广播模式

4. 特性

三、Future 与 Stream 对比

四、高级技巧与最佳实践

1. Future 的陷阱

2. Stream 的优化

五、async/await

1. 使用 Future + then() 模式

2. 使用 async + await

3. 回调地狱解决

六、总结

相关推荐


一、Future:处理单次异步操作

        在 Dart 库中随处可见 Future 对象,通常异步函数返回的对象就是一个 Future。 当一个 future 执行完后,他里面的值就可以使用了,可以使用 then() 来在 future 完成的时候执行其他代码。Future对象其实就代表了在事件队列中的一个事件的结果

1. 概念解读

  • 定义Future 表示一个可能在未来完成的 单次异步操作,并返回一个值或错误(代表了事件结果)。

  • 状态

    • 未完成(Uncompleted):操作尚未结束。

    • 已完成(Completed):

      • 成功(value):可等待多个异步结果进行后续操作:wait方法。

      • 失败(error):对异步编程的异常捕获用 try/catch 或 .catchError() 捕获异常。

2. 使用场景

  • 网络请求(如 http.get

  • 文件读写

  • 延迟任务(如 Future.delayed

  • 单次数据库查询

3. 基本用法

3.1 创建 Future

  var dio = Dio();//通过 Dio 库发出HTTP GET请求返回的FutureFuture future= dio.get("https://www.wanandroid.com/banner/json");

3.2 使用 then 消费 Future

void main() {var dio = Dio();//通过 Dio 库发出HTTP GET请求返回的FutureFuture future= dio.get("https://www.wanandroid.com/banner/json");//使用 then 消费 future 返回结果future.then((response){print("返回结果:$response");});
}

3.3 特性

  • 链式调用:支持通过 .then() 串联多个异步操作。

  • 错误传播:错误会沿着链式调用传递,直到被 catchError 捕获

  • 嵌套地狱:避免过度嵌套 .then(),优先使用 async/await(下面有讲)


二、Stream:处理连续异步事件流

        Future 表示稍后获得的一个数据,所有异步的操作的返回值都用 Future 来表示。但是 Future 只能表示一次异步获得的数据。而 Stream 表示多次异步获得的数据。比如 IO 处理的时候,每次只会读取一部分数据和一次性读取整个文件的内容相比,Stream 的好处是处理过程中内存占用较小。而 Future 是一次性读取整个文件的内容进来,虽然获得完整内容处理起来比较方便,但是如果文件很大的话就会导致内存占用过大的问题。

1. 概念解读

  • 定义Stream 表示一个 连续的异步事件序列,可以发射多个值(数据、错误、完成信号)。

  • 数据流:类似于“管道”,数据从生产者(如网络、传感器)流向消费者。

2. 使用场景

  • 实时聊天消息

  • 文件下载进度更新

  • 用户输入事件(如搜索框输入)

  • 传感器数据(如陀螺仪、GPS)

3. 基本用法

3.1 创建 Stream

  //创建 StreamStream<List<int>> stream = File("/Users/scc/Downloads/SCCDemo.apk").openRead();

3.2 监听 Stream

  //订阅 Streamstream.listen((List<int> bytes) {print("SccFile----Stream执行"); //执行多次});

        listen() 其实就是订阅这个Stream,它会返回一个 StreamSubscription 订阅者。订阅者提供了取消订阅的 cancel() 等方法

3.3 StreamSubscription 订阅者

  //创建 StreamStream<List<int>> stream = File("/Users/scc/Downloads/SCCDemo.apk").openRead();//订阅 StreamStreamSubscription<List<int>> listen = stream.listen((List<int> bytes) {print("SccFile----Stream执行"); //执行多次});listen.onData((_){print("替代listen函数");});listen.onDone((){print("结束");});listen.onError((e,s){print("异常");});//暂停,如果没有继续则会退出程序listen.pause();//继续listen.resume();

 3.4 Stream 广播模式

        Stream有两种订阅模式:单订阅和多订阅。单订阅就是只能有一个订阅者,上面的使用我们都是单订阅模式,而广播是可以有多个订阅者。通过 Stream.asBroadcastStream() 可以将一个单订阅模式的 Stream 转换成一个多订阅模式的 Stream,isBroadcast 属性可以判断当前 Stream 所处的模式。

  Stream<List<int>> stream = File("/Users/scc/Downloads/SCCDemo.apk").openRead();//换成一个多订阅模式的 Streamvar broadcastStream = stream.asBroadcastStream();broadcastStream.listen((List<int> bytes) {print("SccFile----BroadcastStream执行111"); //执行多次});broadcastStream.listen((List<int> bytes) {print("SccFile----BroadcastStream执行222"); //执行多次});print("Stream模式:${broadcastStream.isBroadcast}");

4. 特性

  • 多值传递:可发射多个数据、错误或完成信号。

  • 冷热流(Cold/Hot Stream)

    • 冷流:每次监听时开始生成数据(如上述 countNumbers)。

    • 热流:数据生成与监听无关(如用户点击事件)。

  • 操作符:支持 mapwheredebounce 等操作符处理数据流。


三、Future 与 Stream 对比

特性FutureStream
数据次数单次结果多次事件
适用场景一次性异步操作(如 HTTP 请求)连续事件流(如聊天、实时更新)
状态管理只能完成一次可持续发射数据或错误
错误处理通过 catchError 或 try/catch通过 onError 或 StreamBuilder
核心方法then()async/awaitlisten()async*yield
内存占用较低(单次操作)较高(需维护订阅关系)

四、高级技巧与最佳实践

1. Future 的陷阱

  • 嵌套地狱:避免过度嵌套 .then(),优先使用 async/await

  • 未处理的错误:始终用 try/catch 或 .catchError() 捕获异常。

  • 不必要的异步:同步任务无需包装为 Future

2. Stream 的优化

  • 资源释放:调用 subscription.cancel() 防止内存泄漏。

  • 防抖与节流:使用 debounce 或 throttle 优化高频事件(如搜索输入)。

  • 广播流:通过 .asBroadcastStream() 支持多个监听者。

五、async/await

        使用 async + await 的代码是异步的,但是看起来很像同步代码。当我们需要获得A的结果,再执行B,时,你需要 then()->then(),合理利用 async + await 能够很好的解决回调地狱的问题。

        下面是一个简单的网络请求,不同的实现方式,结果是相同的。

1. 使用 Future + then() 模式

void main() {var dio = Dio();dio.get("https://www.wanandroid.com/banner/json").then((response) {print("返回结果:$response");});
}

2. 使用 async + await

void main() async{var dio = Dio();Response response = await dio.get("https://www.wanandroid.com/banner/json");print("返回结果:$response");
}

3. 回调地狱解决

import 'package:dio/dio.dart';// void main() {
//   var dio = Dio();
//   dio.get("https://www.wanandroid.com/banner/json").then((response) {
//     print("返回结果:$response");
//     dio.get("https://www.wanandroid.com/article/list/1/json").then((s) {
//       print("返回结果:$s");
//     });
//   });
// }void main() async{var dio = Dio();Response response = await dio.get("https://www.wanandroid.com/banner/json");Response response2 = await dio.get("https://www.wanandroid.com/article/list/1/json");print("返回结果:$response");print("返回结果:$response2");
}

        当然如果你觉得这种方式写着不美观可借助 Future.wait 组合两个任务,在两个任务都完成后,再利用进行后面的操作。

Iterable<Future> futures = [_getBanner(), _getArticlelist()];
await Future.wait(futures);

六、总结

  • Future 是处理 单次异步操作 的基石,适合简单、离散的任务。

  • Stream 是管理 连续事件流 的终极方案,适合实时性要求高的场景。

  • 选择依据

    • 需要单个结果? → 使用 Future

    • 需要持续更新? → 使用 Stream

        掌握二者差异并合理运用,可显著提升 Flutter 应用的响应速度和代码可维护性。在实际开发中,常结合 Future 处理单次请求,用 Stream 管理状态(如 Bloc 库)或实时数据流,以实现高效异步编程。

相关推荐

Flutter Isolate入门指南:轻松实现高效并发编程-CSDN博客文章浏览阅读1k次,点赞30次,收藏30次。在Flutter开发中,面对复杂的业务逻辑和大量的数据处理需求,如何确保应用的流畅性和响应速度成为了开发者们关注的焦点。Flutter Isolate作为一种轻量级的并发执行单元,为我们提供了解决这一问题的有效手段。本文将带你深入了解Flutter Isolate的基本概念、使用场景以及如何在Flutter项目中轻松实现高效并发编程。_flutter isolate https://shuaici.blog.csdn.net/article/details/145505453Dart 中的Mixin:提高代码重用性和模块化的利器-CSDN博客文章浏览阅读1k次,点赞22次,收藏19次。本文介绍了Dart中Mixin的概念和使用方法。Mixin是一种代码重用机制,允许开发者将一些功能混入到一个类中,而不必通过继承来实现。文章详细阐述了Mixin的定义、使用以及与继承的冲突处理。通过使用Mixin,开发者可以大大提高代码的可重用性和模块化程度,将共通的功能封装起来,在需要的地方引入,避免了重复编写相同的代码。同时,Mixin还可以将复杂的代码逻辑拆分成更小的、可管理的模块,降低了代码的复杂性,提高了代码的可读性和可维护性。 https://shuaici.blog.csdn.net/article/details/145332099

正在参与 2024 博客之星评选活动,希望大佬们多多支持,谢谢啦:
​​​​​​https://www.csdn.net/blogstar2024/detail/070

相关文章:

Flutter 异步编程利器:Future 与 Stream 深度解析

目录 一、Future&#xff1a;处理单次异步操作 1. 概念解读 2. 使用场景 3. 基本用法 3.1 创建 Future 3.2 使用 then 消费 Future 3.3 特性 二、Stream&#xff1a;处理连续异步事件流 1. 概念解读 2. 使用场景 3. 基本用法 3.1 创建 Stream 3.2 监听 Stream 3.…...

langchain实现的内部问答系统及本地化替代方案

主旨&#xff1a;问答系统搭建使用langchain要token&#xff0c;本文目的在于一、解析langchain调用过程&#xff0c;二、不使用langchain规避token&#xff0c;而使用本地化部署的方案方向。主要是本地向量化库的建立。 文章目录 主旨&#xff1a;问答系统搭建使用langchain要…...

“新旗手”三星Galaxy S25系列,再次定义了AI手机的进化方向

一年多前&#xff0c;三星Galaxy S24系列正式发布&#xff0c;作为首款由Galaxy AI赋能的AI手机&#xff0c;带来了即圈即搜、通话实时翻译、AI扩图等“神奇能力”。 彼时AI手机还是一个新物种&#xff0c;没有明确的产品定义&#xff0c;体验上也没有“标准答案”。三星Galax…...

JVM的类加载器

什么是类加载器&#xff1f; 类加载器&#xff1a;JVM只会运行二进制文件&#xff0c;类加载器的作用就是将字节码文件加载到JVM中&#xff0c;从而Java 程序能够启动起来。 类加载器有哪些&#xff1f; 启动类加载器(BootStrap ClassLoader):加载JAVA HOME/jre/lib目录下的库…...

Node.js中的模块化:从原理到实践

目录 一、为什么需要模块化&#xff1f; 二、Node.js模块类型解析 2.1 核心模块 2.2 文件模块 2.3 第三方模块 三、CommonJS规范深度解析 3.1 模块加载原理 3.2 模块缓存机制 3.3 循环依赖处理 四、ES Modules新特性 4.1 基本用法 4.2 与CommonJS的差异比较 五、模…...

LLM论文笔记 6: Training Compute-Optimal Large Language Models

Arxiv日期&#xff1a;2022.3.29机构&#xff1a;Google DeepMind 关键词 scaling lawpower law参数量FLOPStokes 核心结论 1. 当前大多数大语言模型&#xff08;如 GPT-3 和 Gopher&#xff09;在计算预算分配上存在问题&#xff0c;模型参数过大而训练数据不足 2. 计算预算…...

数仓:核心概念,数仓系统(ETL,数仓分层,数仓建模),数仓建模方法(星型模型,雪花模型,星座模型)和步骤

数仓建模的核心概念 事实表&#xff08;Fact Table&#xff09;&#xff1a; 存储业务过程的度量值&#xff08;如销售额、订单数量等&#xff09;。 通常包含外键&#xff0c;用于关联维度表。 维度表&#xff08;Dimension Table&#xff09;&#xff1a; 存储描述性信息&…...

markdown|mermaid|typora绘制流程图的连接线类型怎么修改?

1、使用typora绘制流程图。别人例子里面的连线是圆弧&#xff0c;我的画出来就是带折线的 这是卖家秀&#xff1a; 这是买家秀&#xff1a; 无语了有没有&#xff1f; 犹豫了片刻我决定一探究竟&#xff08;死磕&#xff09;。 Typora --> 文件 --> 偏好设置 --》 mar…...

理解WebGPU 中的 GPUDevice :与 GPU 交互的核心接口

在 WebGPU 开发中&#xff0c; GPUDevice 是一个至关重要的对象&#xff0c;它是与 GPU 进行交互的核心接口。通过 GPUDevice &#xff0c;开发者可以创建和管理 GPU 资源&#xff08;如缓冲区、纹理、管线等&#xff09;&#xff0c;并提交命令缓冲区以执行渲染和计算任…...

庞氏骗局(Ponzi Scheme):金融投资与公司经营中的隐形陷阱(中英双语)

庞氏骗局&#xff1a;金融投资与公司经营中的隐形陷阱 庞氏骗局&#xff08;Ponzi Scheme&#xff09;&#xff0c;这个词在金融史上屡见不鲜。从投资骗局到企业经营中的资本运作&#xff0c;庞氏骗局的核心逻辑始终如一&#xff1a;用后来的资金填补前面的缺口&#xff0c;营…...

【黑马点评】 使用RabbitMQ实现消息队列——3.批量获取1k个用户token,使用jmeter压力测试

【黑马点评】 使用RabbitMQ实现消息队列——3.批量获取用户token&#xff0c;使用jmeter压力测试 3.1 需求3.2 实现3.2.1 环境配置3.2.2 修改登录接口UserController和实现类3.2.3 测试类 3.3 使用jmeter进行测试3.4 测试结果3.5 将用户登录逻辑修改回去3.6 批量删除生成的用户…...

前端调用串口通信

项目录结构 node项目 1&#xff09; 安装serialport npm install serialport 2&#xff09;编写index.js 1 const SerialPort require(serialport); 2 var senddata [0x02];//串口索要发送的数据源 3 var port new SerialPort(COM3);//连接串口COM3 4 port.on(open, fun…...

微信小程序请求大模型监听数据块onChunkReceived方法把数据解析成json

自己写的真是案例&#xff0c;onChunkReceived监听到的数据块发现监听到的内容不只是一个块&#xff0c;有时候会是多块&#xff0c;所以自己加了一个循环解析的过程&#xff0c;不知道大家监听到的数据情况是否一致。 在网上翻阅大量资料有的说引入js文件&#xff0c;亲测无效…...

SQL Server STUFF 函数的用法及应用场景

在 SQL Server 中&#xff0c;STUFF 函数是一种强大的字符串处理工具&#xff0c;常用于删除指定位置的字符并插入新的字符。通过这个函数&#xff0c;开发者能够灵活地修改字符串&#xff0c;从而在数据处理、字符串拼接和格式化等方面大显身手。本文将深入探讨 STUFF 函数的语…...

Qt使用CipherSqlite插件访问加密的sqllite数据库

1.下载 git clone https://github.com/devbean/QtCipherSqlitePlugin.git 2.编译CipherSqlite插件 使用qt打开QtCipherSqlitePlugin项目&#xff0c;并构建插件 ​ 3.将构建的插件复制到安装目录 ​ 4.使用DB Browser (SQLCipher)创建数据库并加密 ​ 5.qt使用Ciphe…...

美国哈美顿零件号A203560 HAMILTON 10µl 1701 N CTC (22S/3) A200S 203560

零件号a61092-01 hamilton ml600 电源 110-220 vac 61092-01 零件号a81322 hamilton 1001 tll 1ml 注射器带塞子 81322 零件号a61710-01 hamilton ml600 探头支架 管架 61710-01 零件号a61614-01 hamilton ml600 填充管 12 ga 1219mm 4.57ml 61614-01 零件号a61615-01 ham…...

深入理解 Rust 的迭代器:从基础到高级

1. 迭代器的基础概念 1.1 什么是迭代器&#xff1f; 迭代器是一种设计模式&#xff0c;允许我们逐个访问集合中的元素&#xff0c;而无需暴露集合的内部结构。在 Rust 中&#xff0c;迭代器通过实现 Iterator trait 来定义。该 trait 主要包含一个方法&#xff1a; pub trai…...

聊聊 IP 地址和端口号的区别

在计算机网络中&#xff0c;两个基本概念对于理解设备如何通过网络进行通信至关重要。IP 地址和端口号是 TCP/IP 的典型特征&#xff0c;其定义如下&#xff1a;IP 地址是分配给连接到网络的每台机器的唯一地址&#xff0c;用于定位机器并与其通信。相反&#xff0c;端口号用于…...

地图打包注意事项

地图打包 &#xff08;注意不能大写 后缀也不能&#xff09; 需要文件 objects_n 文件夹 &#xff08;内部大量png文件和plist文件&#xff09;.map.png 小地图tiles_n_n.plist 和tiles_n_n.png 文件sceneAtlasSplitConfigs合并.txt 文件放入 objects_n文件夹 内部(.png文件…...

代码随想录算法营Day38 | 62. 不同路径,63. 不同路径 II,343. 整数拆分,96. 不同的二叉搜索树

62. 不同路径 这题的限制是机器人在m x n的网格的左上角&#xff0c;每次只能向下走一格或者向右走一格。问到右下角有多少条不同路径。这个动态规划的初始状态是第一行和第一列的格子的值都是1&#xff0c;因为机器人只能向右走一格或者向下走一格&#xff0c;所以第一行和第…...

科普:数据仓库中的“指标”和“维度”

在数据仓库中&#xff0c;指标和维度是两个核心概念&#xff0c;它们对于数据分析和业务决策至关重要。以下是对这两个概念的分析及举例说明&#xff1a; 一、指标 定义&#xff1a; 指标是用于衡量业务绩效的关键数据点&#xff0c;通常用于监控、分析和优化企业的运营状况。…...

`Pinia` + `Formily` + `useTable` 实现搜索条件缓存方案

Pinia + Formily + useTable 实现搜索条件缓存方案 背景 在当前的应用体验中,每当用户刷新页面或退出系统时,之前的搜索条件就会消失不见。为了进一步提升工作效率并增强用户体验,希望能够实现这样一个功能:即使用户进行了页面刷新或是暂时离开了平台,再次返回时也能自动…...

Trader Joe‘s EDI 需求分析

Trader Joes成立于1967年&#xff0c;总部位于美国加利福尼亚州&#xff0c;是一家独特的零售商&#xff0c;专注于提供高质量且价格合理的食品。公司经营范围涵盖了各类杂货、冷冻食品、健康食品以及独特的本地特色商品。 EDI需求分析 电子数据交换&#xff08;EDI&#xff…...

【BUG】conda虚拟环境下,pip install安装直接到全局python目录中

问题描述 conda虚拟环境下&#xff0c;有的虚拟环境的python不能使用&#xff08;which python时直接使用全局路径下的python&#xff09;&#xff0c;且pip install也会安装到全局路径中&#xff0c;无法安装到conda虚拟环境中。 解决方案 查看虚拟环境的PIP缓存默认路径&…...

用Shader glsl实现一个简单的PBR光照模型

PBR模型定义了各种光照属性&#xff0c;如基础颜色、金属度、粗糙度等&#xff0c;就像给物体设定各种 “性格特点”。顶点着色器负责把顶点从模型空间转换到裁剪空间&#xff0c;同时计算一些用于光照计算的参数&#xff0c;就像给顶点 “搬家” 并准备好 “行李”。而片段着色…...

Linux系统使用ollama本地安装部署DeepSeekR1 + open-webui

Linux系统使用ollama本地安装部署DeepSeekR1 open-webui 1. 首先&#xff0c;下载安装ollama #下载安装脚本并执行 curl -fsSL https://ollama.com/install.sh | sh #安装完成后查看ollama版本 ollama --version2. 使用ollama下载deepseek #不同的参数规格对硬件有不同的要…...

学习星开源在线考试教育系统

学习星开源考试系统 项目介绍 项目概述&#xff1a; 学习星在线考试系统是一款基于Java和Vue.js构建的前后端分离的在线考试解决方案。它旨在为教育机构、企业和个人提供一个高效、便捷的在线测试平台&#xff0c;支持多种题型&#xff0c;包括但不限于单选题、多选题、判断…...

树莓派通过手机热点,无线连接PC端电脑,进行远程操作

树莓派通过手机热点实现无线连接具有以下几点优势&#xff1a; 1.该方式能够联网&#xff0c;方便在项目开发时下载一些数据包。 2.该方式能够通过手机端查看树莓派IP地址(有些情况树莓派ip地址会发生改变) 借鉴链接如下&#xff1a; 树莓派的使用网线及无线连接方法及手机…...

【工业安全】-CVE-2022-35561- Tenda W6路由器 栈溢出漏洞

文章目录 1.漏洞描述 2.环境搭建 3.漏洞复现 4.漏洞分析 4.1&#xff1a;代码分析 4.2&#xff1a;流量分析 5.poc代码&#xff1a; 1.漏洞描述 漏洞编号&#xff1a;CVE-2022-35561 漏洞名称&#xff1a;Tenda W6 栈溢出漏洞 威胁等级&#xff1a;高危 漏洞详情&#xff1…...

Windows环境管理多个node版本

前言 在实际工作中&#xff0c;如果我们基于Windows系统开发&#xff0c;同时需要维护老项目&#xff0c;又要开发新项目&#xff0c;且不同项目依赖的node版本又不同时&#xff0c;那么就需要根据项目切换不同的版本。本文使用Node Version Manager&#xff08;nvm&#xff0…...

git 沙盒 下(二)

url &#xff1a;Learn Git Branching 高级git 多次Rebase 最开始我先把bugFix分支先rebase到main上&#xff0c;之后再把c7合并到c6 &#xff0c;之后就差合并为一个分支了&#xff0c;但是无论移动c7还是another分支都无法合并&#xff0c;都会在原地停留 后来根据提示最…...

基于JavaSpringmvc+myabtis+html的鲜花商城系统设计和实现

基于JavaSpringmvcmyabtishtml的鲜花商城系统设计和实现 &#x1f345; 作者主页 网顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系…...

vue-plugin-hiprint (vue2

页面效果 <template><div><div class"d-flex flex-column mt5"><div class"d-flex flex-row " style"margin-bottom: 10px;justify-content: center;"><!-- 纸张大小 A3、A4 等 --><div class"paper&quo…...

网站地址栏怎么变成HTTPS开头?

在当今的数字世界中&#xff0c;网络安全已成为不可或缺的一部分。对于网站管理员和所有者来说&#xff0c;确保访问者数据的安全和隐私至关重要。HTTPS是一种加密的通信协议&#xff0c;通过在客户端和服务器之间建立安全连接来保护数据传输。将网站从HTTP升级到HTTPS不仅提升…...

手机用流量怎样设置代理ip?

互联网各领域资料分享专区(不定期更新)&#xff1a; Sheet...

Web渗透实战--XSS 常用语句以及绕过思路

Web渗透实战–XSS 常用语句以及绕过思路 0x01&#xff1a;干货 - XSS 测试常用标签语句 0x0101&#xff1a; 标签 <!-- 点击链接触发 - JavaScript 伪协议 --><a hrefjavascript:console.log(1)>XSS1</a> <!-- 字符编码绕过 - JavaScript 伪协议 -->&…...

哈希表-两个数的交集

代码随想录-刷题笔记 349. 两个数组的交集 - 力扣&#xff08;LeetCode&#xff09; 内容: 集合的使用 , 重复的数剔除掉&#xff0c;剩下的即为交集&#xff0c;最后加入数组即可。 class Solution {public int[] intersection(int[] nums1, int[] nums2) {Set<Integer…...

“数字+实体“双引擎发力树莓集团打造翠屏区首个智慧产业孵化标杆

2025 年 2 月 13 日&#xff0c;宜宾市翠屏区招商引资项目集中签约活动圆满举行。树莓集团产业合作总监童曦鸣代表企业出席并签约&#xff0c;将在翠屏区打造数字经济示范项目。 此次签约&#xff0c;树莓集团将以 “数字 实体” 双引擎发力。在数字产业化方面&#xff0c;凭…...

PostgreSQL 数据库压力测试指南

一、为什么需要压力测试&#xff1f; 数据库需要进行压力测试的原因主要包括以下几个方面&#xff1a; 性能评估&#xff1a;通过压力测试&#xff0c;可以了解数据库在高负载情况下的性能表现&#xff0c;包括响应时间、吞吐量和资源利用率等。这有助于确定系统的性能瓶颈。 …...

npm : 无法加载文件 C:\nvm\v20.11.1\npm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅

在vscode中运行前端项目时npm run dev 报错&#xff1a;npm : 无法加载文件 C:\nvm\v20.11.1\npm.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies。 所在位置 行:1…...

-bash:/usr/bin/rm: Argument list too long 解决办法

问题概述 小文件日志太多导致无法使用rm命令&#xff0c;因为命令行参数列表的长度超过了系统允许的最大值。 需要删除/tmp目录下的所有文件&#xff0c;文件数量比较多。 ls -lt /tmp | wc -l 5682452 解决方法如下&#xff1a; 使用find -exec 遍历&#xff0c;然后执行删…...

【deepseek 部署中的常见问题及解决方案--亲测有效】

deepseek 部署中的常见问题及解决方案 一、环境与安装相关问题二、配置相关问题三、运行与性能问题四、其他常见问题 一、环境与安装相关问题 Python版本不兼容 问题描述&#xff1a;在部署DeepSeek时&#xff0c;系统提示Python版本不兼容。解决方法&#xff1a;DeepSeek推荐…...

【React】react-redux+redux-toolkit实现状态管理

安装 npm install reduxjs/toolkit react-reduxRedux Toolkit 是官方推荐编写Redux的逻辑方式&#xff0c;用于简化书写方式React-redux 用来链接Redux和React组件之间的中间件 使用 定义数据 创建要管理的数据模块 store/module/counter.ts import { createSlice, Payloa…...

LabVIEW用户界面(UI)和用户体验(UX)设计

作为一名 LabVIEW 开发者&#xff0c;满足功能需求、保障使用便捷与灵活只是基础要求。在如今这个用户体验至上的时代&#xff0c;为 LabVIEW 应用程序设计直观且具有美学感的界面&#xff0c;同样是不容忽视的关键任务。一个优秀的界面设计&#xff0c;不仅能提升用户对程序的…...

期权帮 | 场外个股期权可以做吗,风险高吗?

锦鲤三三每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 场外个股期权可以做吗&#xff0c;风险高吗? 场外个股期权&#xff0c;就是在正式的交易所之外进行交易的个股期权。 注&#xff1a;这里的“场外”指的是这类交易不在像沪深…...

【Viper】配置格式与支持的数据源与go案例

Viper 是一个用于 Go 应用程序的配置管理库&#xff0c;支持多种配置格式和数据源。 安装依赖 go get github.com/spf13/viper go get github.com/spf13/viper/remote go get go.etcd.io/etcd/client/v3"github.com/spf13/viper/remote"要写在etcd客户端import里 1…...

【工具变量】地级市数字基础设施水平数据(2003-2024年)

一、数据来源&#xff1a;数据涵盖了2003-2024年间地级市新型数字基础设施的发展水平测量值。数据的核心来自地方政府工作报告中提及的相关词汇&#xff0c;并通过对这些报告的分词和频次统计&#xff0c;得出每个城市在该领域的数字基础设施发展水平。 数据覆盖全国285个地级市…...

Ae:常见的光照控件和材质控件

在 After Effects中&#xff0c;几种模拟效果都有类似的光照控件和材质控件&#xff0c;比如&#xff0c;焦散、卡片动画、碎片等。 光照控件和材质控件允许用户模拟不同光源、阴影和高光效果&#xff0c;控制表面反射特性&#xff0c;从而实现真实的光照和反射模拟。适用于材质…...

POI 的 Excel 读写操作教程

POI 的 Excel 读写操作教程 一、POI 简介 Apache POI 是一款在 Java 开发中广受欢迎的开源库&#xff0c;主要用于处理各种 Microsoft Office 文件格式&#xff0c;Excel 文件便是其中之一。凭借其功能强大的 API&#xff0c;POI 不仅支持对 Excel 文件的读取、写入和修改&am…...

java处理pgsql的text[]类型数据问题

背景 公司要求使用磐维数据库&#xff0c;于是去了解了这个是基于PostgreSQL构建的&#xff0c;在使用时有场景一条图片数据中可以投放到不同的页面&#xff0c;由于简化设计就放在数组中&#xff0c;于是使用了text[]类型存储&#xff1b;表结构 #这是一个简化版表结构&…...