深入探讨 Android 中的 AlarmManager:定时任务调度及优化实践
引言
在 Android 开发中,AlarmManager 是一个非常重要的系统服务,用于设置定时任务或者周期性任务。无论是设置一个闹钟,还是定时进行数据同步,AlarmManager 都是不可或缺的工具之一。然而,随着 Android 系统的不断演进,设备管理策略、尤其是电池管理策略(如 Doze 模式)不断变化,AlarmManager 的使用也变得复杂起来。本文将深入探讨 AlarmManager 的使用、工作原理、以及它在现代 Android 设备上的局限性,同时提供实际的代码演示和优化建议,帮助开发者更好地理解和使用这一工具。
AlarmManager 的基本概念和工作原理
什么是 AlarmManager?
AlarmManager 是 Android 中的一种系统服务,允许应用程序在未来某个时间点触发任务。通过 AlarmManager,开发者可以实现各种定时任务,最典型的如:闹钟、定期同步数据、定时通知等。
AlarmManager 的工作机制
AlarmManager 的核心原理是:设置一个定时任务,在未来某一时刻唤醒应用程序或系统服务执行指定操作。你可以选择在指定时间唤醒设备并执行操作(例如发出广播、启动服务等)。
AlarmManager 的触发类型
AlarmManager 提供了多种触发方式,主要包括以下几种:
RTC:基于当前时间来触发任务。如果设备处于休眠状态,则任务可能会被延迟执行。
RTC_WAKEUP:与 RTC 类似,但会在触发时间点唤醒设备。
ELAPSED_REALTIME:基于设备自启动以来的时间来触发任务,不受设备休眠影响。
ELAPSED_REALTIME_WAKEUP:与 ELAPSED_REALTIME 类似,但会在触发时间点唤醒设备。
AlarmManager 的常用方法
set():设置一个单次任务,任务将在指定的时间点触发。
setRepeating():设置一个周期性任务,任务将在指定时间间隔内重复执行。
setInexactRepeating():设置一个周期性任务,但系统会对时间进行一定的延迟,以优化电池消耗。
AlarmManager 的使用场景
闹钟和提醒功能:常见于需要在指定时间点提醒用户的应用,例如闹钟应用、待办事项提醒等。
定期同步数据:一些应用需要定期从网络获取数据,AlarmManager 可以用于定期启动一个同步任务,保持数据的实时性。
定时发送通知:例如,定时推送新闻、天气预报等信息。
后台任务调度:即使应用被关闭,AlarmManager 仍然可以触发任务,适用于需要在指定时间触发后台任务的应用场景。
AlarmManager 的基础使用:实现一个简单的定时任务
创建一个简单的定时任务
下面是一个简单的例子,展示如何使用 AlarmManager 设置一个定时任务,在 10 秒后触发并显示一个 Toast。
步骤一:设置 AlarmManager
public class MainActivity extends AppCompatActivity {private AlarmManager alarmManager;private PendingIntent pendingIntent;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);// 创建一个广播接收器Intent intent = new Intent(this, AlarmReceiver.class);pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);// 设置定时任务 - 这里使用 RTC_WAKEUP,定时在 10 秒后触发long triggerAtMillis = System.currentTimeMillis() + 10000; // 10秒后触发alarmManager.set(AlarmManager.RTC_WAKEUP, triggerAtMillis, pendingIntent);}
}
步骤二:创建接收广播的组件
public class AlarmReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, "定时任务已触发!", Toast.LENGTH_SHORT).show();}
}
说明:
MainActivity 中通过 AlarmManager 设置了一个定时任务,定时在 10 秒后触发。
触发时会通过 PendingIntent 启动一个广播接收器 AlarmReceiver,并在 onReceive() 方法中执行相应的操作(如显示 Toast)。
任务触发的时间是基于当前时间的 10 秒后。
流程图:
用户打开应用:用户启动应用并进入 MainActivity。
设置定时任务:应用通过 AlarmManager 设置定时任务,在 10 秒后触发。
定时任务触发:在 10 秒后,AlarmReceiver 的 onReceive() 被调用,显示 Toast 提示用户。
使用 AlarmManager 实现周期性任务
需求背景
除了设置一次性的定时任务外,很多应用还需要实现定期的任务调度。例如,某些应用需要定期同步数据或者发送提醒。
示例:定期同步数据
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);// 创建一个广播接收器Intent intent = new Intent(this, AlarmReceiver.class);pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);// 设置周期性任务,每30秒触发一次long startTime = System.currentTimeMillis();long interval = 30000; // 30秒alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, startTime, interval, pendingIntent);
}
说明:
setRepeating() 方法设置了一个定期任务,每隔 30 秒触发一次。
每次任务触发时,都会唤醒设备并执行 AlarmReceiver 中的代码。
注意事项:
在 Android 6.0 及以上版本中,setRepeating() 方法会受到 Doze 模式的影响。如果设备进入 Doze 模式,周期任务可能会被延迟。
为了适应更严格的电池优化,推荐使用 JobScheduler 或 WorkManager 来替代 AlarmManager。
AlarmManager 的局限性与优化实践
- Doze 模式的影响
从 Android 6.0(API 23)开始,Android 引入了 Doze 模式来延长电池使用寿命。当设备处于空闲状态时,系统会限制后台任务的执行,AlarmManager 可能无法准时触发任务。这使得基于 AlarmManager 的周期性任务不再可靠,尤其是当设备长时间未充电且未被使用时。
解决方案:
使用 setExact() 和 setExactAndAllowWhileIdle():这些方法可以确保任务在指定的时间点精确执行,即使设备处于 Doze 模式。
使用 JobScheduler 或 WorkManager:这些 API 设计用来适应 Doze 模式,能够更加智能地安排任务的执行,确保任务在合适的时间执行。
2. 任务精确性与系统负载
AlarmManager 的任务并不保证在精确的时间点触发。尤其是在设备负载较高时,任务可能会被延迟执行。因此,如果你的应用对任务的精确性要求较高,使用 AlarmManager 可能不是最优的选择。
解决方案:
考虑使用 JobScheduler 或 WorkManager:这两个 API 能够更智能地管理任务的执行,能够根据系统资源和电池状态决定任务的调度时机。
3. 优化电池消耗
频繁地设置定时任务,尤其是周期性任务,可能会导致电池消耗过快。为此,可以通过以下方式来优化电池使用:
减少定时任务的频率:如果任务不需要精确执行,可以减少触发的频率,减少系统调度的负担。
使用 setInexactRepeating():该方法会让系统自行调整任务触发的时间,以提高电池效率。
高级用法:结合 JobScheduler 和 AlarmManager 使用
虽然 AlarmManager 是一个强大的工具,但在 Android 6.0 及以上版本,JobScheduler 和 WorkManager 更适合现代的电池管理策略。因此,在需要定期执行任务的场景中,建议使用 JobScheduler 或 WorkManager 来代替传统的 AlarmManager。
以下是一个结合 JobScheduler 使用的示例:
JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
JobInfo jobInfo = new JobInfo.Builder(0, new ComponentName(this, MyJobService.class)).setPersisted(true).setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED).setPeriodic(30000) // 30秒间隔.build();
jobScheduler.schedule(jobInfo);
在这个示例中,我们使用 JobScheduler 来定期执行任务,并且可以设置更多的约束条件,如需要无流量网络、设备是否充电等。
总结
本文深入探讨了 Android 中的 AlarmManager,从基础的定时任务到周期性任务的实现,详细分析了其使用场景、工作原理以及一些实际应用中的优化技巧。在 Android 设备的电池管理策略不断变化的背景下,AlarmManager 的使用也需要结合 JobScheduler 或 WorkManager 进行优化,以确保任务能够高效、准确地执行。希望通过本文的分享,开发者能更好地理解并合理利用 AlarmManager,构建更为高效、可靠的 Android 应用。
相关文章:
深入探讨 Android 中的 AlarmManager:定时任务调度及优化实践
引言 在 Android 开发中,AlarmManager 是一个非常重要的系统服务,用于设置定时任务或者周期性任务。无论是设置一个闹钟,还是定时进行数据同步,AlarmManager 都是不可或缺的工具之一。然而,随着 Android 系统的不断演…...
【Vim Masterclass 笔记07】S05L19:Vim 剪切、复制、粘贴操作同步练习
文章目录 S05L19 Vim 剪切、复制、粘贴操作同步练习(Exercise 05 - Cut, Copy and Paste)1 训练目标2 操作指令2.1 打开 dyp.txt 文件2.2 交换文件的头两行2.3 将文件首行 put 到文件其他为止2.4 练习在光标位置的上方粘贴文本行2.5 通过交换字符顺序更正…...
【前端下拉框】获取国家国旗
一、先看效果 二、代码实现(含国旗) <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…...
Elasticsearch 操作文档对数据的增删改查操作 索引库文档 操作数据 CRUD
介绍 在 Elasticsearch 中,文档的增、删、改、查操作是核心的基本功能。Elasticsearch 使用 RESTful API 提供这些操作,通常通过 HTTP 请求与 Elasticsearch 集群进行交互。 索引库 {"mappings": {"properties": {"title&qu…...
【动手学电机驱动】STM32-MBD(2)将 Simulink 模型部署到 STM32G431 开发板
STM32-MBD(1)安装 STM32 硬件支持包 STM32-MBD(2)Simulink 模型部署入门 STM32-MBD(3)Simulink 状态机模型部署 【动手学电机驱动】STM32-MBD(2)Simulink 模型部署入门 1. 软硬件条件…...
小试牛刀-SpringBoot集成SOL链
目录 一、什么是solanaj? 二、Pom依赖 三、主要类 3.1 RpcClient 3.2 PublicKey 3.3 Transaction 3.4 TransactionInstruction 四、示例代码 Welcome to Code Blocks blog 本篇文章主要介绍了 [小试牛刀-SpringBoot集成SOL链] ❤博主广交技术好友,喜欢文章的…...
数据结构大作业——家谱管理系统(超详细!完整代码!)
目录 设计思路: 一、项目背景 二、功能分析 查询功能流程图: 管理功能流程图: 三、设计 四、实现 代码实现: 头文件 结构体 函数声明及定义 创建家谱树头结点 绘制家谱树(打印) 建立右兄弟…...
【计算机网络】课程 实验二 交换机基本配置和VLAN 间路由实现
实验二 交换机基本配置和VLAN 间路由实现 一、实验目的 1.了解交换机的管理方式。 2.掌握通过Console接口对交换机进行配置的方法。 3.掌握交换机命令行各种模式的区别,能够使用各种帮助信息以及命令进行基本的配置。 4&…...
最新MySQL面试题(2025超详细版)
2025最新超详细MySQL面试题 文章目录 2025最新超详细MySQL面试题[toc]一、 SQL 和基本操作1. SQL的执行顺序2. 如何优化MySQL查询3. 常用的聚合函数4. 数据库事务5. 事务的四大特性(ACID)6. 视图7. MySQL中使用LIMIT子句进行分页8. MySQL中使用变量和用户定义的函数9. MySQL中的…...
Unity-Mirror网络框架-从入门到精通之AdditiveScenes 示例
文章目录 前言Additive Levels和Additive ScenesAdditive Levels场景介绍Portal传送门FadeInOut特效 Additive Scenes示例介绍ZoneHandlerSceneMassage 最后 前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。Mirror是一个用于Unity的开源网络框…...
java 转义 反斜杠 Unexpected internal error near index 1
代码: String str"a\\c"; //出现异常,Unexpected internal error near index 1 //System.out.println(str.replaceAll("\\", "c"));//以下三种都正确 System.out.println(str.replace(\\, c)); System.out.println(str.r…...
html内容过长,实现向上循环滑动效果
以下是几种实现 HTML 内容过长时向上循环滑动的常见方法,你可以根据具体需求和项目场景来选择合适的实现方式: 一、使用 CSS3 animation 实现简单的向上循环滑动(适用于简单的文本等内容滑动场景) 原理 通过 CSS3 的 keyframes…...
RAG(Retrieval-Augmented Generation,检索增强生成)流程
目录 一、知识文档的准备二、OCR转换三、分词处理四、创建向量数据库五、初始化语言聊天模型1.prompt2.检索链3.对话 完整代码 知识文档的准备:首先需要准备知识文档,这些文档可以是多种格式,如Word、TXT、PDF等。使用文档加载器或多模态模型…...
数据库系统概论期末复习
期末考试题型: 选择题 20题 20分 判断题 10题 10分 简答题 4题 20分 SQL语句: (select delete update)30分 设计题:ER图 和关系模式 ER转关系模式,注意主码,外码的标注 15分 应用题:…...
B树与B+树:数据库索引的秘密武器
想象一下,你正在构建一个超级大的图书馆,里面摆满了各种各样的书籍。B树和B树就像是两种不同的图书分类和摆放方式,它们都能帮助你快速找到想要的书籍,但各有特点。 B树就像是一个传统的图书馆摆放方式: 1. 书籍摆放&…...
数据结构-栈与队列笔记
普通的双端队列 验证图书取出顺序 class Solution {/*** 验证书籍的借阅顺序是否合法。* * param putIn 表示放入书架的书籍序列。* param takeOut 表示从书架取出的书籍序列。* return 如果书籍的借阅顺序合法,返回 true;否则返回 false。*/public boo…...
Netty中用了哪些设计模式?
大家好,我是锋哥。今天分享关于【Netty中用了哪些设计模式?】面试题。希望对大家有帮助; Netty中用了哪些设计模式? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Netty 是一个高性能的网络通信框架,广泛…...
设计模式与游戏完美开发(3)
更多内容可以浏览本人博客:https://azureblog.cn/ 😊 该文章主体内容来自《设计模式与游戏完美开发》—蔡升达 第二篇 基础系统 第五章 获取游戏服务的唯一对象——单例模式(Singleton) 游戏实现中的唯一对象 在游戏开发过程中…...
人工智能的发展领域之GPU加速计算的应用概述、架构介绍与教学过程
文章目录 一、架构介绍GPU算力平台概述优势与特点 二、注册与登录账号注册流程GPU服务器类型配置选择指南内存和存储容量网络带宽CPU配置 三、创建实例实例创建步骤镜像选择与设置 四、连接实例SSH连接方法远程桌面配置 一、架构介绍 GPU算力平台概述 一个专注于GPU加速计算的…...
【51单片机零基础-chapter5:模块化编程】
模块化编程 将以往main中泛型的代码,放在与main平级的c文件中,在h中引用. 简化main函数 将原来main中的delay抽出 然后将delay放入单独c文件,并单独开一个delay头文件,里面放置函数的声明,相当于收纳delay的c文件里面写的函数的接口. 注意,单个c文件所有用到的变量需要在该文…...
彻底学会Gradle插件版本和Gradle版本及对应关系
看完这篇,保你彻底学会Gradle插件版本和Gradle版本及对应关系,超详细超全的对应关系表 需要知道Gradle插件版本和Gradle版本的对应关系,其实就是需要知道Gradle插件版本对应所需的gradle最低版本,详细对应关系如下表格࿰…...
容器技术思想 Docker K8S
容器技术介绍 以Docker为代表的容器技术解决了程序部署运行方面的问题。在容器技术出现前,程序直接部署在物理服务器上,依赖管理复杂,包括各类运行依赖,且易变,多程序混合部署时还可能产生依赖冲突,给程序…...
在C程序中实现类似Redis的SCAN机制的LevelDB大规模key分批扫描
在C程序中实现类似Redis的SCAN机制的LevelDB大规模key分批扫描,需要充分利用LevelDB的迭代器(iterator)功能,以便能够高效地扫描和处理大量的键值对。下面是一个详细的实现指南。 环境准备 首先,确保已经安装了Level…...
多模态论文笔记——CogVLM和CogVLM2
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍多模态模型的LoRA版本——CogVLM和CogVLM2。在SD 3中使用其作为captioner基准模型的原因和优势。 文章目录 CogVLM论文背景VLMs 的任务与挑战现有方法及…...
BLDC无感控制的驱动逻辑
如何知道转子已经到达预定位置,因为我们只有知道了转子到达了预定位置之后才能进行换相,这样电机才能顺滑的运转。转子位置检测常用的有三种方式。 方式一:通过过零检测,三相相电压与电机中性点电压进行比较。过零检测的优点在于…...
分布式多机多卡训练全景指南:MPI、DeepSpeed 与 Colossal-AI 深度解析
分布式多机多卡训练技术是深度学习领域提高训练效率和加快模型收敛的重要手段。以下是几个流行的框架和工具: 1. MPI(Message Passing Interface) 概述 MPI 是一种标准化的消息传递协议,用于多机多卡之间的通信与协作,…...
Unity中 Xlua使用整理(一)
1.安装: 从GitHub上下载Xlua源码 Tencent/xLua: xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc. (github.com) 下载Xlua压缩包,并解压将Aseet文件夹中的Xlua和Plugins文件夹复制到Unit…...
在调用 borrowObject 方法时,Apache Commons Pool 会根据连接池的配置触发一系列相关的方法
在调用 borrowObject 方法时,Apache Commons Pool 会根据连接池的配置触发一系列相关的方法 1. GrpcChannel 的概念 GrpcChannel 是 gRPC 客户端与服务器之间通信的核心组件。它是基于 HTTP/2 的连接,支持多路复用,即通过单个通道可以发送多…...
【数据结构与算法:八、排序】
第8章 排序 排序是计算机科学中最基本且最常用的操作之一。本章详细介绍了排序算法的概念、分类、每种算法的定义、图示、代码实现及其应用场景。 8.1 基本概念和排序方法概述 8.1.1 排序的基本概念 排序是指将一组无序的记录按照某种指定的顺序重新排列的过程。 排序的目…...
Unity学习笔记(六)使用状态机重构角色移动、跳跃、冲刺
前言 本文为Udemy课程The Ultimate Guide to Creating an RPG Game in Unity学习笔记 整体状态框架(简化) Player 是操作对象的类: 继承了 MonoBehaviour 用于定义游戏对象的行为,每个挂载在 Unity 游戏对象上的脚本都需要继承自 MonoBehaviour&#x…...
搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程
参考文章: 安装protoc、protoc-gen-go、protoc-gen-go-grpc-CSDN博客 一、简单介绍 本文开发环境,均为 windows 环境,mac 环境其实也类似 ~ ① 编译proto文件,相关插件 简单介绍: protoc 是编译器,用于将…...
策略模式(strategy)
一.策略模式是什么 策略模式是一种行为型对象模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以相互替换。这样,算法可以独立于使用它的客户端而变化。 策略者模式的核心思想是将一系列的算法封装到一系列的策略类里…...
Centos源码安装MariaDB 基于GTID主从部署(一遍过)
MariaDB安装 安装依赖 yum install cmake ncurses ncurses-devel bison 下载源码 // 下载源码 wget https://downloads.mariadb.org/interstitial/mariadb-10.6.20/source/mariadb-10.6.20.tar.gz // 解压源码 tar xzvf mariadb-10.5.9.tar.gz 编译安装 cmake -DCMAKE_INSTA…...
如何在 VSCode 中配置 C++ 开发环境:详细教程
如何在 VSCode 中配置 C 开发环境:详细教程 在软件开发的过程中,选择一个合适的开发环境是非常重要的。Visual Studio Code(VSCode)作为一款轻量级的代码编辑器,凭借其强大的扩展性和灵活性,受到许多开发者…...
信息安全、网络安全和数据安全的区别和联系
1. 前言 有次有朋友问我 信息安全、网络安全和数据安全,这三个词平时写文档时怎么用? 我想很多人都说不清。这次我查阅了资料,尽量讲清楚这三者之间的区别和联系。 2. 信息安全 2.1 定义 信息安全是指为数据处理系统建立和采用的技术和管…...
路由组件与一般组件的区别
路由组件与一般组件的区别 1. 基本概念 1.1 路由组件 路由组件是指通过路由规则映射的组件,通常放在 pages 或 views 文件夹中。 1.2 一般组件 一般组件是指通过 import 导入后直接使用的组件,通常放在 components 文件夹中。 2. 主要区别 2.1 存…...
【微服务】4、服务保护
微服务架构与组件介绍 单体架构拆分:黑马商城早期为单体架构,后拆分为微服务架构。跨服务调用与组件使用 服务拆分后存在跨服务远程调用,如下单需查询商品信息,使用openfeign组件解决。服务间调用关系复杂,需维护服务…...
6_TypeScript 函数 --[深入浅出 TypeScript 测试]
在 TypeScript 中,函数是编程的核心组成部分之一。TypeScript 不仅继承了 JavaScript 的所有函数特性,还添加了静态类型检查和其他一些增强功能,使得函数更加安全和易于理解。以下是关于 TypeScript 函数的一些关键点和两个具体的示例&#x…...
Apifox=Postman+Swagger+Jmeter+Mock
A. 开发人员接口管理使用(Swagger 工具管理接口) B. 后端开发人员通过Postman 工具,一边开发一边测试 C. 前端开发人员需要Mock 工具提供前端调用 D. 测试人员通过(Postman、Jmeter)等工具进行接口测试 为了后台开发、前端开发、测试工程师等不同角色更加便捷管理…...
升级 Spring Boot 3 配置讲解 —— Spring Boot 3 核心源码专讲
学会这款 🔥全新设计的 Java 脚手架 ,从此面试不再怕! Spring Boot 3 是 Spring 生态中的重要里程碑,它不仅全面支持 Java 17,还引入了许多新特性,如对 GraalVM 原生镜像的支持、改进的性能优化以及更灵活的…...
接口开发完后,个人对于接下来接口优化的一些思考
优化点 入参的合法性和长度范围,必填项的检查验证 因为没有入参,所以不需要考虑。 批量思想解决N1问题 // 假设要查询100个订单及其对应的用户信息 List<Order> orders orderMapper.selectList(new QueryWrapper<>().last("limit …...
jenkins 使用 ssh-agent向windows进行部署
背景: jenkins在linux的docker环境内,应用服务部署在windows。需要使用jenkins实现自动化部署。 实现方式: jenkins上构建pipeline任务,脚本如下: 遇到问题: 1、问题:jenkins 调用部署bat脚…...
音视频入门基础:MPEG2-PS专题(6)——FFmpeg源码中,获取PS流的视频信息的实现
一、引言 通过FFmpeg命令可以获取到PS文件/PS流的视频压缩编码格式、色彩格式(像素格式)、分辨率、帧率信息: ./ffmpeg -i XXX.ps 本文以H.264为例讲述FFmpeg到底是从哪个地方获取到这些视频信息的。 二、视频压缩编码格式 (…...
如果Adobe 退出中国后怎么办
最近听说Adobe要退出中国了?那咱们的设计师们可得好好想想怎么搞到正版软件了。别急,今天教大家一个超酷的福利——Edu邮箱! Edu邮箱是什么?有什么好处? Edu邮箱就是学校给学生和老师们发的邮箱,一般结尾是.edu。有了…...
欧几里得距离在权重矩阵中的物理意义
欧几里得距离在权重矩阵中的物理意义 目录 欧几里得距离在权重矩阵中的物理意义**衡量神经元差异程度**:**反映模型变化程度**:**聚类和分组的依据**:自然语言处理中的模型更新:**神经网络聚类分组**:欧几里得距离在权重矩阵中的物理意义衡量神经元差异程度: 在神经网络中…...
玩转大语言模型——ollama导入huggingface下载的模型
ollama导入huggingface模型 前言gguf模型查找相关模型下载模型 导入Ollama配置参数文件导入模型查看导入情况 safetensfors模型下载模型下载llama.cpp配置环境并转换 前言 ollama在大语言模型的应用中十分的方便,但是也存在一定的问题,比如不能使用自己…...
Linux-----进程通讯(管道Pipe)
目录 进程不共享内存 匿名管道 通过匿名管道实现通讯 有名管道 库函数mkfifo() 案例 进程不共享内存 不同进程之间内存是不共享的。是相互独立的。 #include <stdio.h> #include <stdlib.h> #include <errno.h>int num 0;int main(int argc, char con…...
【C++11】列表初始化、右值引用和移动语义、引用折叠、完美转发
C11 一.C的发展历史二.列表初始化1.C98的{}2.C11的{}3.C11中的std::initializer_list 三.右值引用和移动语义1.左值和右值2.左值引用和右值引用3.引用延长生命周期4.左值和右值的参数匹配5.右值引用和移动语义使用场景1.左值引用使用场景2.移动构造和移动赋值3.右值引用和移动语…...
Openssl1.1.1s rpm包构建与升级
rpmbuild入门知识 openssh/ssl二进制升级 文章目录 前言一、资源准备1.下载openssh、openssl二进制包2.安装rpmbuild工具3.拷贝源码包到SOURCES目录下4.系统开启telnet,防止意外导致shh无法连接5.编译工具安装6.补充说明 二、制作 OpenSSL RPM 包1.编写 SPEC 文件2.…...
递归思想的深度理解——汉诺塔问题和青蛙跳台阶问题
递归的深度理解——汉诺塔问题and青蛙跳台阶问题 青蛙跳台阶问题汉诺塔问题 青蛙跳台阶问题 问题:一只青蛙可以一次跳一级台阶,也可以一次跳两级台阶,如果青蛙要跳n级台阶,共有多少种跳法? 解答:我们可以先…...