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

鸿蒙开发中的并发与多线程


文章目录

  • 前言
  • 异步并发 (Promise和async/await)
  • 多线程并发
  • 并发能力选择
    • 耗时任务并发执行场景
      • 常见业务场景
    • 常驻任务并发执行场景
      • 常见业务场景
    • 传统共享内存并发业务
    • 长时任务并发执行场景
      • 常见业务场景
  • 并发任务管理
  • 线程间通信
    • 同语言线程间通信(ArkTS内)
    • 线程间模块共享(单例模式)
      • 实现方案介绍(方案二)
    • 线程间不可变数据共享
      • 实现方案介绍
    • 生产者与消费者模式


前言

并发是指在同一时间内,存在多个任务同时执行的情况。对于多核设备,这些任务可能同时在不同CPU上并行执行。对于单核设备,多个并发任务不会在同一时刻并行执行,但是CPU会在某个任务休眠或进行I/O操作等状态下切换任务,调度执行其他任务,提升CPU的资源利用率。


异步并发 (Promise和async/await)

  • Promise 的特点与用法:Promise 用于处理异步操作,有 pending、fulfilled、rejected 三种状态,通过构造函数传入 executor 函数创建 Promise 对象,executor 函数接收 resolve 和 reject 回调函数。可使用 then 和 catch 方法指定不同状态的回调函数。
  • async/await 的优势:async/await 是 Promise 的语法糖,使异步代码更易读,async 函数返回 Promise 对象,内部可用 await 等待 Promise 解析,将异步操作以同步方式编写,还可结合 try/catch 捕获异常。

多线程并发

  • ArkTS并发模型:ArkTS采用内存隔离的线程模型,不同线程之间通过消息通信,线程内无锁化运行。与传统共享内存并发模型相比,异步I/O不阻塞ArkTS线程,TaskPool及I/O线程池由系统管理,提升能效。

  • 在这里插入图片描述
    不支持在多线程中使用AppStorage。

  • TaskPool的使用:TaskPool可执行耗时任务,提供任务分发入口,支持将任务分发到不同优先级队列,自动管理工作线程并根据任务数量扩缩容。适用于相对独立的耗时任务、长时任务,但任务执行中有通信开销、不能阻塞过长、不能有上下文依赖等限制。

  • Worker的使用:Worker可执行常驻任务,需开发者主动创建或关闭并维护其生命周期,同时运行的Worker子线程数量有限。适用于长耗时且并发量不大的常驻任务场景。

  • 实现特点对比

    • 内存模型与参数传递机制:TaskPool 和 Worker 都采用线程间隔离、内存不共享的方式,且参数传递都采用结构化克隆算法,支持 ArrayBuffer 转移和 SharedArrayBuffer 共享。,开发者自行管理数量及生命周期,不支持上述 TaskPool 的其他特性。
  • 适用场景对比

    • TaskPool 适用场景:大多数场景推荐使用,性能优于 Worker,适用于需要设置优先级、频繁取消任务、大量或调度点较分散任务等。
    • Worker 适用场景:适用于运行时间超过 3 分钟的任务、有关联的一系列同步任务等特定场景。

场景编号

场景分类

场景名称

简述

1

并发能力选择

耗时任务并发执行

相对独立的耗时任务需要放到单独的子线程中执行,推荐TaskPool

2

常驻任务并发执行

常驻的耗时任务需要放到单独的子线程中执行,推荐Worker

3

共享内存并发业务

开发常见的共享内存并发业务,推荐使用TaskPool和Worker的API进行开发

4

长时任务并发执行

长时间运行的任务,不独占线程执行,推荐TaskPool长时任务

5

并发任务管理

多任务关联执行(串行顺序依赖)

有严格执行顺序的任务,不希望并发执行

6

多任务关联执行(树状依赖)

待执行的任务存在依赖关系,等待被依赖执行完再调度

7

多任务同步等待结果(任务组)

多个关联的任务需要等待全部结果返回后再进行后续操作

8

多任务优先级调度

不同任务设置不同的优先级

9

任务延时调度

任务不希望立即执行,希望延时一定时间后调度

10

线程间通信

同语言线程间通信(ArkTS内)

介绍ArkTS线程间的通信机制

11

跨语言多线程通信(C++与ArkTS)

介绍C++与ArkTS线程间的通信机制

12

线程间模块共享(单例模式)

介绍进程内单例场景的实现方式

13

线程间不可变数据共享

介绍不可变数据共享场景的实现方式

14

生产者与消费者模式

介绍生产者与消费者模式场景的实现方式

并发能力选择

耗时任务并发执行场景

典型的耗时任务有CPU密集型任务、I/O密集型任务以及同步任务。=>任务池(TaskPool)
对于独立的耗时任务,不建议采用Worker来实现。


import { taskpool } from '@kit.ArkTS';@Concurrent
async function foo(a: number, b: number) {return a + b;
}taskpool.execute(foo, 1, 2).then((ret: Object) => { // 结果处理console.log('Return:' + ret);
})

常见业务场景

常见业务场景具体业务描述
图片/视频编解码将图片或视频进行编解码再展示
压缩/解压缩对本地压缩包进行解压操作,或者本地文件的压缩操作
JSON解析对JSON字符串的序列化和反序列化操作
模型运算对数据进行模型运算分析等
网络下载密集网络请求下载资源、图片、文件等
数据库操作将聊天记录、页面布局信息、音乐列表信息等保存到数据库,或者应用二次启动时,读取数据库展示相关信息

常驻任务并发执行场景

常驻不是指可以在后台保活运行的任务,而是相比于短时任务,时间更长的任务,可能与主线程生命周期一致。
对于一些长耗时(大于3min)且并发量不大的常驻任务场景,使用Worker在后台线程中运行这些耗时逻辑,避免阻塞主线程而导致出现丢帧卡顿等影响用户体验性的问题 。
常驻任务不推荐作为任务分发给TaskPool。

常见业务场景

常见业务场景具体业务描述
游戏中台场景启动子线程作为游戏业务的主逻辑线程,UI线程只负责渲染
产线硬件压测需要阻塞调用硬件能力,做老化测试,阻塞式

传统共享内存并发业务

如果需要使用内存共享,当前可以通过Node-API到C++层进行共享,或者定义Sendable对象进行线程间数据共享。

长时任务并发执行场景

长时任务不同于阻塞任务,长周期运行,但是每次执行不会阻塞线程很久。因此不推荐将需要独占线程的任务封装成长时任务。任务池(TaskPool)

对于非常驻的长时任务,不建议采用Worker来实现。

长时任务指的是长时间不间断运行的独立任务,例如监听某个事件,发起执行后不会再接收发起方的输入,虽然也可以使用worker(推荐常驻后台任务才使用worker),但是更推荐使用TaskPool,TaskPool更方便,资源消耗更低。

常见业务场景

常见业务场景具体业务描述
定期传感器数据采集周期性采集一些传感器信息(例如位置信息、速度传感器等),应用运行阶段常驻运行。
Socket端口信息监听长时间监听Socket数据,不定时需要响应处理。
import { taskpool } from '@kit.ArkTS';@Concurrent
async function foo() {// 长监听等任务taskpool.Task.sendData();
}function executeTaskPool() {let longTask: taskpool.LongTask = new taskpool.LongTask(foo);longTask.onReceiveData((msg: Object) => {// 监听回调console.info(`onReceiveData, ${JSON.stringify(msg)}`);});taskpool.execute(longTask).then(() => {console.info('execute');});
}executeTaskPool();

并发任务管理

多任务关联执行(串行顺序依赖)

多任务关联执行(树状依赖)

多任务同步等待结果(任务组)

多任务优先级调度

任务延时调度

线程间通信

同语言线程间通信(ArkTS内)

跨线程交互场景通信方式通信优先级
宿主JS线程->TaskPool线程参数传递后分发任务;过程中不支持正向通信支持
TaskPool线程->宿主JS线程结果返回;sendData触发宿主线程异步回调,底层为uv_async_send实现不支持
宿主JS线程->Worker线程采用postMessage&onmessage异步通信不支持
Worker线程->宿主JS线程异步方式:采用postMessage & onmessage异步通信
同步方式:支持Worker线程同步调用宿主线程注册的方法,并返回结果
不支持
任意JS线程<->任意JS线程使用ohos.emitter实现双向异步通信支持

线程间模块共享(单例模式)

实现方案介绍(方案二)

步骤一:采用ArkTS对象,定义Sendable类的单例,封装成共享模块(进程内共享),子线程进行初始化;

步骤二:初始化完成通知主线程,主线程导入使用该单例对象。

线程间不可变数据共享

实现方案介绍

通过冻结API,使共享对象变成只读对象。实现方案介绍:

步骤一:业务逻辑定义、生成需要的Sendable对象;

步骤二:发送到其他ArkTS线程前通过Object.Freeze API冻结该对象;

步骤三:通过taskpool或worker的消息通信机制将该对象共享到其他ArkTS线程。

生产者与消费者模式

相关文章:

鸿蒙开发中的并发与多线程

文章目录 前言异步并发 (Promise和async/await)多线程并发并发能力选择耗时任务并发执行场景常见业务场景 常驻任务并发执行场景常见业务场景 传统共享内存并发业务长时任务并发执行场景常见业务场景 并发任务管理线程间通信同语言线程间通信&#xff08;ArkTS内&#xff09;线…...

ruby self

在 Ruby 中&#xff0c;self 是一个指向当前对象的特殊变量&#xff0c;它的值根据代码的上下文动态变化。理解 self 的指向是掌握 Ruby 面向对象编程的关键。以下是详细解析&#xff1a; 一、self 的核心规则 self 始终指向当前方法的执行者&#xff08;即调用方法的对象&…...

Kotlin 学习-集合

/*** kotlin 集合* List:是一个有序列表&#xff0c;可通过索引&#xff08;下标&#xff09;访问元素。元素可以在list中出现多次、元素可重复* Set:是元素唯一的集合。一般来说 set中的元素顺序并不重要、无序集合* Map:&#xff08;字典&#xff09;是一组键值对。键是唯一的…...

封装方法的辨析

equals //字符串 str1.equals(str2); //list的两个实现类 list1.equals(list2); //map的两个实现类 //比较所有的键值对是否相同 map1.equals(map2); //数组&#xff08;包括string类型&#xff09; //比较内容是否相同 Arrays.equals(array1, array2); contains 基本都有…...

解决 IntelliJ IDEA 中 Maven 项目左侧项目视图未显示顶层目录问题的详细步骤说明

以下是解决 IntelliJ IDEA 中 Maven 项目左侧项目视图未显示顶层目录问题的详细步骤说明&#xff1a; 1. 切换项目视图模式 默认情况下&#xff0c;IDEA 的项目视图可能处于 Packages 模式&#xff0c;仅显示代码包结构&#xff0c;而非物理目录。 操作步骤&#xff1a; 点击…...

CMIP6数据分析与可视化、降尺度技术与气候变化的区域影响、极端气候分析

当前的CMIP6计划相较于前代模型&#xff0c;在空间分辨率、物理过程表达和地球系统组件耦合等方面均有显著提升。 一&#xff1a;气候变化研究的AI新视角 1、气候模型基础与全球气候模型&#xff08;GCM&#xff09; 全球气候&#xff08;环流&#xff09;模型的基本原理、发…...

如何精准控制大模型的推理深度

论文标题 ThinkEdit: Interpretable Weight Editing to Mitigate Overly Short Thinking in Reasoning Models 论文地址 https://arxiv.org/pdf/2503.22048 代码地址 https://github.com/Trustworthy-ML-Lab/ThinkEdit 作者背景 加州大学圣迭戈分校 动机 链式推理能显…...

1. Git 下载和安装

文章目录 Git 下载Git 安装&#xff08;以windows为例&#xff09;Git 使用&#xff08;以windows为例&#xff09; Git 下载 1.进 Git 官网 https://git-scm.com/downloads 2.选择对应的操作系统 3.选择对应的操作系统位数 Git 安装&#xff08;以windows为例&#xff09;…...

git回滚指定版本并操作

你可以通过以下步骤切换到第三个版本。根据你的需求&#xff0c;有两种主要方法&#xff1a; 方法 1&#xff1a;临时查看第三个版本&#xff08;不修改当前分支&#xff09; 适用于仅查看或测试旧版本&#xff0c;不保留后续修改&#xff1a; 找到第三个版本的提交哈希&#…...

FastAdmin和thinkPHP学习文档

介绍 - FastAdmin框架文档 - FastAdmin开发文档https://doc.fastadmin.net/doc目录结构 ThinkPHP5.0完全开发手册 看云ThinkPHP V5.0是一个为API开发而设计的高性能框架——是一个颠覆和重构版本&#xff0c;采用全新的架构思想&#xff0c;引入了很多的PHP新特性&#xff0c…...

通过HTTP协议实现Git免密操作的解决方案

工作中会遇到这样的问题的。 通过HTTP协议实现Git免密操作的解决方案 方法一&#xff1a;启用全局凭据存储&#xff08;推荐&#xff09; 配置凭证存储‌ 执行以下命令&#xff0c;让Git永久保存账号密码&#xff08;首次操作后生效&#xff09;&#xff1a; git config --g…...

git 查看某一文件夹下所有文件 修改记录

git: 如何查询某个文件或者某个目录的更新历史_git 查看指定文件夹的记录-CSDN博客 git log --follow path/to/your/file git log -p --follow path/to/your/file git log --stat --follow path/to/your/file这是最常用的方法&#xff0c;可以显示指定文件的所有提交历史…...

测试(一)

软件的生命周期&#xff1a; 需求分析——计划——设计——编码——测试——运行维护 常见的开发模型&#xff1a; 瀑布模型&#xff1a; 最基本的开发模型&#xff0c;绝大多数开发模型的基本框架。 特点&#xff1a;线性的开发流程 使用场景&#xff1a;需求固定&#xff…...

解决华硕主板Z890m下载ubuntu20.04后没有以太网问题

问题描述&#xff1a; 华硕主板Z890m下载双系统ubuntu20.04后&#xff0c;发现ubuntu不能打开以太网。 问题原因&#xff1a; 华硕主板的网卡驱动是r8125,而ubuntu20.04的驱动版本是r8169&#xff0c;所以是网卡驱动不匹配造成 解决方案 开机界面按下F2进入BOIS模式&#…...

从零推导飞机小扰动运动线性方程——0. 学习目录

第0期文章——学习目录 如图&#xff0c;本专栏将连载以下学习内容&#xff0c;带你从零开始学习飞机小扰动方程&#xff01;...

Agentic AI 干货!DeepSeek + OpenAI SDK 构建 Agent 实战

引言&#xff1a; DeepSeek-R1、OpenAI-o1 等具备内化的假设、反思、验证等优秀推理能力的 LLM 大型推理模型将 AI 发展推进到智能体 AI 时代&#xff0c;将使 AI Agent 迸发出远超上一代由外化的手搓式简单推理 Agent 不可比拟的发展势能。 在 GTC2025 大会上&#xff0c;英伟…...

【语法】C++的list

目录 为什么会有list&#xff1f; 迭代器失效&#xff1a; list和vector的迭代器不同的地方&#xff1a; list的大部分用法和vector都很像&#xff0c;例如push_back&#xff0c;构造&#xff0c;析构&#xff0c;赋值重载这些就不再废话了&#xff0c;本篇主要讲的是和vecto…...

Java接口性能优化面试问题集锦:高频考点与深度解析

1. 如何定位接口性能瓶颈&#xff1f;常用哪些工具&#xff1f; 考察点&#xff1a;性能分析工具的使用与问题定位能力。 核心答案&#xff1a; 工具&#xff1a;Arthas&#xff08;在线诊断&#xff09;、JProfiler&#xff08;内存与CPU分析&#xff09;、VisualVM、Prometh…...

基于STM32与应变片的协作机械臂力反馈控制系统设计与实现---5.2 工业机械臂系统性能测试全方案(专业工程级)

5.2 工业机械臂系统性能测试全方案(专业工程级) 一、测试体系架构设计 1.1 三级测试体系 #mermaid-svg-A55VxjZ7ENKNWAli {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-A55VxjZ7ENKNWAli .error-icon{fill:#55…...

VM——相机拍照失败

1、问题&#xff1a;相机频闪触发&#xff0c;在MVS中正常出图&#xff0c;在VM中出现拍照失败 2、解决&#xff1a; 1、首先排查网络设置&#xff08;巨帧是否设置&#xff09; 2、电脑的所有防火墙是否关闭 3、在MVS中恢复相机的设置参数为默认参数&#xff0c;删除VM中的全…...

图解力扣回溯及剪枝问题的模板应用

文章目录 选哪个的问题17. 电话号码的字母组合题目描述解题代码图解复杂度 选不选的问题78. 子集题目描述解题代码图解复杂度 两相转化77. 组合题目描述解题代码法一&#xff1a;按选哪个的思路法二&#xff1a;按选不选的思路 图解选哪个&#xff1a;选不选 复杂度 选哪个的问…...

Trae + LangGPT 生成结构化 Prompt

Trae LangGPT 生成结构化 Prompt 0. 引言1. 安装 Trae2. 克隆 LangGPT3. Trae 和 LangGPT 联动4. 集成到 Dify 中 0. 引言 Github 上 LangGPT 这个项目&#xff0c;主要向我们介绍了写结构化Prompt的一些方法和示例&#xff0c;我们怎么直接使用这个项目&#xff0c;辅助我们…...

模糊测试究竟在干什么

目录 1.软件漏洞和缺陷 2.模糊测试与传统测试 3.汽车领域中的模糊测试 4.常见工具总结 1.软件漏洞和缺陷 提单、上票、拒收&#xff0c;这是开发和测试的日常博弈。大多数时候&#xff0c;我们是根据自己对需求的理解来进行开发和测试&#xff0c;这基本是属于功能层级。 …...

【RTD200P04 MCAL 篇3】 S32M244 PWM PDB ADC控制

【RTD200P04 MCAL 篇3】 S32M244 PWM PDB ADC控制 一&#xff0c;文档简介二&#xff0c;PWMTRGMUXPDBADC 2ch 软件配置与实现2.1 软硬件版本平台2.2 MCAL工程以及模块配置2.2.1 Dio 模块配置2.2.2 Adc模块配置2.2.3 Mcu模块配置2.2.4 Platform模块配置2.2.5 Port模块配置2.2.6…...

03--Deepseek服务器部署与cjson解析

一、ollama部署deepseek模型 1、Ollama 是一个开源的本地大语言模型运行框架&#xff0c;专为在本地机器上便捷部署和运行大型语言模型&#xff08;LLM&#xff09;而设计。 Ollama 教程&#xff1a;从 0 到 1 全面指南 教程【全文两万字保姆级详细讲解】 -CSDN博客 1.下载o…...

实现抗隐私泄漏的AI人工智能推理

目录 什么是私人AI? 什么是可信执行环境? TEE 如何在 AI 推理期间保护数据? 使用 TEE 是否存在风险? 有哪些风险? Atoma 如何应对这些风险 为什么去中心化网络是解决方案 人工智能推理过程中还有其他保护隐私的方法吗? 私人人工智能可以实现什么? 隐私驱动的应…...

Kotlin 学习--数组

一、关于数组的基础知识和常用方式 /*** kotlin 数组* 使用arrayOf创建数组&#xff0c;必须指定数组的元素&#xff0c;可以是任意类型* */val arrayNumber arrayOf(1, 2, 3, 4)/*** 集合中的元素可以是任意类型* kotlin 中的Any 等价于 java 中的Object 对象的意思* */val a…...

Spring Boot 启动后自动执行 Service 方法终极指南

**导语​​&#xff1a;**在 Spring Boot 开发中&#xff0c;我们经常需要在应用启动后立即执行初始化任务&#xff08;如加载配置、预热缓存、启动定时任务&#xff09;。本文将深度解析 ​​5 种主流实现方案​​&#xff0c;包含完整代码示例、执行顺序控制技巧和避坑指南&a…...

STM32 HAL库之GPIO示例代码

LED灯不断闪烁 GPIO初始化&#xff0c;main文件中的 MX_GPIO_Init(); 也就是在 gpio.c文件中 void MX_GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct {0};/* GPIO Ports Clock Enable */__HAL_RCC_GPIOE_CLK_ENABLE();__HAL_RCC_GPIOC_CLK_ENABLE();__HAL_RCC_GPIOA_C…...

中间件-消息队列

SpringAMQP 任何语言只要遵循AMAP协议&#xff0c;都可以与RabbitMQ交互 生产者、队列、交换机、消费者 生产者Publisher&#xff1a;生产消息&#xff0c;发给交换机 交换机Exchange&#xff1a;接收生产者发送的消息。知道如何处理消息&#xff0c;例如递交给某个特别队列、…...

go游戏后端开发32:自摸杠处理逻辑

当我们在自摸杠时&#xff0c;实际上在杠完之后&#xff0c;我们还需要进行一个删除操作。因此&#xff0c;我们需要在上面拷贝一个删除操作。由于这是自摸杠&#xff0c;所以这个地方需要删除四次。在这里&#xff0c;我们需要注意的是&#xff0c;自摸杠时&#xff0c;传过来…...

AI创业风向标:构建下一代「AI叙事创作平台」

随着技术的进步和市场需求的爆发,AI故事叙述平台正成为投资者和创业者关注的焦点。本文将探讨为何这一赛道值得关注,并提供一些关于如何构建成功的AI叙事创作平台的战略建议。 一、为什么这是2025年值得关注的赛道? 1. 底层需求的爆发 人类永恒的故事需求:全球每月有超过…...

拜特科技签约惠生工程,携手打造高效资金管理系统

近日&#xff0c;拜特科技成功签约惠生工程(中国)有限公司&#xff08;以下简称“惠生工程”&#xff09;资金管理系统项目。此次双方携手打造一套先进的资金管理系统&#xff0c;为惠生工程的战略发展注入强劲新动力&#xff0c;推动其资金管理迈向更高水平。 惠生工程作为行…...

快瞳宠物肢体关键点检测:让宠物设备更懂“猫言狗语”

在宠物经济高速发展的今天&#xff0c;智能设备已渗透到养宠生活的方方面面。然而&#xff0c;如何让设备真正理解宠物的行为意图&#xff1f;快瞳科技推出的宠物肢体关键点检测技术&#xff0c;通过精准捕捉宠物肢体动作&#xff0c;为智能喂食、健康监测、行为训练等场景提供…...

【安卓】APP生成器v1.0,生成属于你的专属应用

今天作者给大家分享一个超级好用的手机APP。还在为反复搜索常用网站抓狂&#xff1f;今天安利一款颠覆性神器——它能将你所有心头好的网页变成专属按钮&#xff0c;像搭乐高一样DIY你的「软件」&#xff0c;从此告别收藏夹混乱&#xff01;小说党、资讯控、摸鱼达人集体狂喜&a…...

详细解读react框架中的hooks

React Hooks 是 React 16.8 引入的一项革命性特性&#xff0c;它允许你在函数组件中使用状态(state)和其他 React 特性&#xff0c;而无需编写 class 组件。下面将详细解读 React Hooks 的核心概念、常用 Hooks 及其工作原理。 一、Hooks 的核心概念 1. 什么是 Hooks Hooks …...

机器学习01-支持向量机(SVM)(未完)

参考浙大 胡浩基老师 的课以及以下链接&#xff1a; https://blog.csdn.net/m0_74100344/article/details/139560508 https://blog.csdn.net/2301_78630677/article/details/132657023 https://blog.csdn.net/lsb2002/article/details/131338700 一、一些定义 T是倒置&…...

Java进阶版线程池(超详细 )

线程池 线程池工具类 Executors Executors 是 Java 提供的一个工具类&#xff0c;它包含了多个静态方法&#xff0c;能够方便地创建不同类型的线程池。 newFixedThreadPool 创建一个固定大小的线程池&#xff0c;线程池中的线程数量固定&#xff0c;当有新任务提…...

场外期权只适合上涨行情吗?

场外期权与直接进行期货市场操作相比&#xff0c;场外期权让我们有了更多的选择空间。”目前期权市场有了更多合适的风险管理模式&#xff0c;场外期权衍生品工具与其需求不谋而合&#xff0c;适合做以小博大&#xff0c;做各种对冲大盘下跌风险等等策略&#xff0c;下文为大家…...

echarts图表相关

echarts图表相关 echarts官网折线图实际开发场景一&#xff1a; echarts官网 echarts官网 折线图 实际开发场景一&#xff1a; 只有一条折线&#xff0c;一半实线&#xff0c;一半虚线。 option {tooltip: {trigger: "axis",formatter: (params: any) > {const …...

【操作系统(Linux)】——多线程对共享变量访问的同步与互斥

一、多线程对共享变量的非互斥访问 我们将要做的&#xff1a;构造多线程共享变量竞争的案例&#xff0c;并分析现象发生的原因&#xff0c;进而思考解决方式。 案例源代码&#xff1a; #include <stdio.h> #include <stdlib.h> #include <pthread.h> #inc…...

deeplabv3+街景图片语义分割,无需训练模型,看不懂也没有影响,直接使用,cityscapes数据集_16

目录 1、下载链接1.1、CSDN链接&#xff0c;含权重文件直接使用&#xff0c;建议直接下这个&#xff0c;还不限速。1.2 Github链接&#xff1a; 2、下载代码&#xff0c;下载预训练好的权重3、预测代码4、像素提取&#xff0c;或者说类别提取5、文档部分内容截图6、其他数据处理…...

[前端]从人体结构看网页三要素:HTML、CSS 与 JavaScript

目录 一、HTML:网页的 “骨架” 二、CSS:网页的 “血肉” 三、JavaScript:网页的 “神经系统” 四、三者协同构建精彩网页 在互联网的浩瀚海洋中,网页是我们与世界交互的重要窗口。一个精彩的网页背后,离不开 HTML、CSS 和 JavaScript 这三位 “幕后英雄”。有趣的是,…...

【Leetcode】3375. 使数组的值全部为 K 的最少操作次数

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 给你一个整数数组 nums 和一个整数 k 。 如果一个数组中所有 严格大于 h 的整数值都 相等 &#xff0c;那么我们称整数 h 是 合法的 。 比方说&#xff0c;如果 nums [10, 8, 10…...

封装uniapp request promise化

uniapp request 封装 一、 封装方法1. 使用 promis 封装 request2. 封装 api 在 api.js3.在要请求的页面 调用 api 一、 封装方法 1. 使用 promis 封装 request const BASE_URL 你的url接口 //比如 http://198.12.3.3/pzexport function request(config {}){let {url,dat…...

架构演进成熟度校验体系构建

架构演进成熟度校验体系构建 ——基于电商价格服务Checklist的图形化实践指南 一、成熟度校验全景视图 #mermaid-svg-tXchQ6nY7QzNUrL1 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-tXchQ6nY7QzNUrL1 .error-ico…...

Llama 4全面评测:官方数据亮眼,社区测试显不足之处

引言 2025年4月&#xff0c;Meta正式发布了全新的Llama 4系列模型&#xff0c;这标志着Llama生态系统进入了一个全新的时代。Llama 4不仅是Meta首个原生多模态模型&#xff0c;还采用了混合专家(MoE)架构&#xff0c;并提供了前所未有的上下文长度支持。本文将详细介绍Llama 4…...

kotlin 多个fragment beginTransaction容器添加使用

在Kotlin中如何使用Fragment的beginTransaction来添加多个Fragment到容器中。我需要先回顾一下Fragment的基本用法&#xff0c;然后考虑多个Fragment的情况。 FragmentTransaction的beginTransaction是用来开启一个事务&#xff0c;然后添加、替换或移除Fragment。通常&#x…...

(PTA) L2-011-L2-015

L2-012 关于堆的判断 由于没有得到AC代码&#xff08;1&#xff0c;3测试点错误&#xff09;,这里先不做展示&#xff0c;等后续复盘的时候进行补充。 L2-011 玩转二叉树 给定一棵二叉树的中序遍历和前序遍历&#xff0c;请你先将树做个镜面反转&#xff0c;再输出反转后的层序…...

管理Linux服务器的用户和组

用户/组 命令符会展示当前用户名和主机名 创建用户&#xff0c;同时创建同名组 useradd 用户名 设置密码 passwd 用户名 切换用户登录 su 用户名 删除用户 userdel -r 用户名 记录用户信息的文件 /etc/passwd 记录密码&#xff08;密文&#xff09;信息的文件 /etc/sh…...