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

Lua | 每日一练 (4)

💢欢迎来到张胤尘的技术站
💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥

文章目录

  • Lua | 每日一练 (4)
    • 题目
    • 参考答案
      • 线程和协程
        • 调度方式
        • 上下文切换
        • 资源占用
        • 实现机制
        • 使用场景
      • `lua` 中的协程
        • 协程的生命周期
        • 主要函数
          • 创建协程
          • 启动或恢复协程
          • 检查当前是否在主协程中运行
          • 暂停协程
          • 检测协程是否可暂停
          • 获取协程状态
          • 包装函数
          • 关闭协程
        • 具体使用

Lua | 每日一练 (4)

题目

协程和线程有何区别?简述 lua 中的协程。

参考答案

线程和协程

协程和线程虽然在某些方面有相似之处,但它们在设计目标、实现原理和使用方式上有很大的区别。下面从调用方式、上下文切换、资源使用、实现机制、使用场景这几个方面进行阐述。

调度方式
  • 线程:线程的执行由操作系统内核控制,操作系统会根据调度算法(如时间片轮转、优先级调度等)自动切换线程的执行。另外,线程的切换时间点不可预测,程序无法直接控制线程的暂停和恢复。
  • 协程:协程的执行由程序显式控制,需要开发者通过 coroutine.yieldcoroutine.resume 显式地暂停和恢复协程。协程的切换完全由程序逻辑决定,切换点是明确的。
上下文切换
  • 线程:线程切换涉及操作系统内核的上下文切换,需要保存和恢复线程的寄存器状态、栈信息等,开销较大。
  • 协程:协程的上下文切换在用户态完成,不需要操作系统内核介入,开销非常小。
资源占用
  • 线程:每个线程都有自己的栈空间,通常默认分配 8 MB,资源占用较大。如果线程数量过多会导致系统资源耗尽。
$ ulimit -s
8192
  • 协程:协程的栈空间是动态分配的,通常占用较少的内存。另外,协程的数量可以非常大,适合处理大规模的并发任务。
实现机制
  • 线程:线程是操作系统提供的并发机制,由操作系统内核管理。线程的创建和销毁需要系统调用,涉及内核态和用户态的切换。
  • 协程:协程是语言层面的机制,由 lua 解释器实现。协程的创建和切换完全在用户态完成,不涉及操作系统内核。
使用场景
  • 线程:适合处理真正的并发任务,例如多核 CPU 上的并行计算,处理 I/O 密集型任务。
  • 协程:适合处理单核 CPU 上的并发任务,尤其是需要频繁切换的场景;适合实现非阻塞 I/O 操作,例如网络编程中的异步请求处理。

lua 中的协程

lua 中,协程是实现异步编程的核心工具之一。由于 lua 本身没有内置的多线程支持,而协程提供了一种轻量级的并发机制,可以用来模拟异步操作,从而实现非阻塞的程序设计。

协程的生命周期

lua 协程的生命周期包括以下几个阶段:

  • 创建:使用 coroutine.create 创建一个协程。此时协程处于挂起状态,尚未开始执行。
  • 运行:使用 coroutine.resume 启动或恢复协程的执行。
  • 暂停:在协程执行过程中,可以通过 coroutine.yield 暂停协程的执行,将控制权交回主程序。
  • 结束:当协程运行完成或因错误终止时,协程进入结束状态。

协程的状态之间切换,如下图所示:

在这里插入图片描述

主要函数

下面介绍 lua 中关于协程的主要函数。

创建协程
local co = coroutine.create(f)
  • f:协程函数,表示协程的主体逻辑。
  • 返回一个协程对象 co,类型为 thread。协程对象可以用于后续的 coroutine.resumecoroutine.yield 等操作。

例如:

-- func 是协程函数,主体逻辑
local function func()print("Coroutine is running")
end-- 创建协程
local co = coroutine.create(func)
print(co) -- thread: 0x60f0c8666df8
启动或恢复协程
ok, ... = coroutine.resume(co, ...)
  • co:要启动或者恢复的协程对象。
  • ...:可选参数,这些参数会传递给协程中的 coroutine.yield 或协程的入口函数。
  • ok:布尔值,表示协程是否成功恢复。如果协程因错误终止,返回 false
  • ...:协程中 coroutine.yield 的返回值。如果协程运行完成,返回值为 nil

说明:

  • 如果协程处于 suspended 状态,coroutine.resume 会启动或恢复协程的执行。
  • 如果协程已经处于 running 状态,调用 coroutine.resume 会抛出错误。
  • 如果协程已经处于 dead 状态,调用 coroutine.resume 也会抛出错误。

例如:

local function func(x, y)print("Coroutine started with:", x, y) -- Coroutine started with:	10	20
endlocal co = coroutine.create(func)local ok, result = coroutine.resume(co, 10, 20)
print(ok, result) -- true	nil
检查当前是否在主协程中运行
current_co, is_main = coroutine.running()
  • current_co:当前运行的协程对象。
  • is_main:布尔值,表示当前是否在主协程中运行,如果是主协程返回 true,否则返回 false

说明:

  • 用于检查当前是否在主协程中运行,以及当前协程是否是主线程。

例如:

local function printCurrentCoroutine()local current_co, is_main = coroutine.running()print(current_co, is_main)
endprintCurrentCoroutine() -- thread: 0x61617e0492a8	truelocal co = coroutine.create(function()print("Printing from the coroutine") -- Printing from the coroutineprintCurrentCoroutine()              -- thread: 0x61617e04fec8	false
end)coroutine.resume(co) -- 启动协程
暂停协程
... = coroutine.yield(...)
  • ...:可选参数,这些参数会传递给调用 coroutine.resume 的代码。
  • 返回值是 coroutine.resume 调用时传递的参数。

说明:

  • coroutine.yield 用于暂停当前协程的执行,并将控制权返回给调用 coroutine.resume 的代码。
  • 协程暂停后,可以通过再次调用 coroutine.resume 恢复执行。

例如:

local function func()print("Coroutine running")              -- Coroutine runninglocal value = coroutine.yield("Yielded value")print("Coroutine resumed with:", value) -- Coroutine resumed with:	Hello
endlocal co = coroutine.create(func)
local ok, result = coroutine.resume(co)
print(ok, result) -- true	Yielded valuelocal ok, result = coroutine.resume(co, "Hello")
print(ok, result) -- true	nil
检测协程是否可暂停
is_yieldable = coroutine.isyieldable([co])
  • co:可选参数,表示要检查的协程对象。默认为当前运行的协程。
  • is_yieldable:布尔值,表示协程是否可以暂停。

说明:

  • 如果协程不是主协程且不在非可暂停的 C 函数中,则返回 true
  • 主协程调用时返回 false
  • 协程处于 suspendeddead 状态时 coroutine.isyieldable 仍然返回 true,因为协程对象本身仍然是有效的,并且在 lua 的语义中,dead 状态的协程仍然可以被认为是可以暂停的(尽管它已经无法再被恢复)。

例如:

local co = coroutine.create(function()print(coroutine.isyieldable()) -- truecoroutine.yield()
end)coroutine.resume(co)             -- 启动协程
print(coroutine.isyieldable(co)) -- true
print(coroutine.status(co))      -- suspended
coroutine.resume(co)
print(coroutine.status(co))      -- dead
print(coroutine.isyieldable(co)) -- true
print(coroutine.isyieldable())   -- false
获取协程状态
status = coroutine.status(co)
  • co:要检查状态的协程对象。
  • 返回一个字符串,表示协程的当前状态:
    • `running:协程正在运行。
    • suspended:协程处于暂停状态。
    • dead:协程已经运行完成或因错误终止。
    • normal:协程尚未启动(初始状态)。

例如:

local function func(co)local status = coroutine.status(co)print(status) -- runningcoroutine.yield("hello, world!")
endlocal co = coroutine.create(func)
local status = coroutine.status(co)
print(status) -- suspendedlocal ok, result = coroutine.resume(co, co)
print(ok, result) -- true	hello, world!local ok, result = coroutine.resume(co, co)
print(ok, result) -- true	nillocal status = coroutine.status(co)
print(status) -- dead
包装函数
f = coroutine.wrap(f)
  • f:协程函数,表示协程的主体逻辑。
  • 返回一个包装函数 f。调用这个包装函数时,会自动启动或恢复协程的执行。

说明:

  • coroutine.wrapcoroutine.createcoroutine.resume 的简化版本。
  • 包装函数的返回值是协程中 coroutine.yield 的参数。
  • 如果协程运行完成,包装函数返回 nil;如果协程因错误终止,会抛出错误。

例如:

local wrapped = coroutine.wrap(function()print("Coroutine running")local value = coroutine.yield("Yielded value")print("Coroutine resumed with:", value)
end)local result = wrapped()
print(result)    -- Yielded valuewrapped("Hello") -- Coroutine resumed with:	Hello
关闭协程
ok, err = coroutine.close(co)
  • co:要关闭的协程对象,协程的状态必须是 suspendeddead 状态。

  • ok:布尔值,表示操作是否成功。

  • err:如果操作失败,返回错误信息。

说明:

  • 关闭协程 co,将其状态设置为 dead,并关闭协程中所有待关闭的变量。
  • 如果协程已经是 dead 状态,调用 coroutine.close 会返回 true

例如:

local co = coroutine.create(function()coroutine.yield() -- 暂停协程
end)coroutine.resume(co)                -- 启动协程
print(coroutine.status(co))         -- suspendedlocal ok, err = coroutine.close(co) -- 关闭协程
print(ok, err)                      -- true	nil
print(coroutine.status(co))         -- dead
具体使用

使用协程实现经典的生产者-消费者模型。协程的暂停和恢复特性非常适合这种场景,因为生产者和消费者可以分别在协程中运行,通过共享队列进行通信。

一个简单的生产者-消费者模型实现,如下所示:

-- 队列实现
local Queue = {}function Queue:new()local obj = {}setmetatable(obj, self)self.__index = selfobj.list = {}return obj
endfunction Queue:put(item)table.insert(self.list, item)
endfunction Queue:get()if #self.list <= 0 thenreturn nilendlocal item = self.list[1]table.remove(self.list, 1)return item
endfunction Queue:is_empty()return #self.list == 0
end-- 生产者函数
local function producer(queue, count)for i = 1, count doprint("Produced:", i)queue:put(i)coroutine.yield()end
end-- 消费者函数
local function consumer(queue, count)for i = 1, count dowhile queue:is_empty() doprint("Waiting for item...")coroutine.yield()endlocal item = queue:get()print("Consumed:", item)end
endlocal queue = Queue:new()
local count = 100 -- 生产/消费数量-- 创建生产者和消费者协程
local co_producer = coroutine.create(function()producer(queue, count)
end)local co_consumer = coroutine.create(function()consumer(queue, count)
end)-- 同时运行生产者和消费者协程
while coroutine.status(co_producer) ~= "dead" or coroutine.status(co_consumer) ~= "dead" doif coroutine.status(co_producer) ~= "dead" thencoroutine.resume(co_producer)endif coroutine.status(co_consumer) ~= "dead" thencoroutine.resume(co_consumer)end
end

🌺🌺🌺撒花!

如果本文对你有帮助,就点关注或者留个👍
如果您有任何技术问题或者需要更多其他的内容,请随时向我提问。

在这里插入图片描述

相关文章:

Lua | 每日一练 (4)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 Lua | 每日一练 (4)题目参考答案线程和协程调度方式上…...

【折线图 Line】——1

🌟 解锁数据可视化的魔法钥匙 —— pyecharts实战指南 🌟 在这个数据为王的时代,每一次点击、每一次交易、每一份报告背后都隐藏着无尽的故事与洞察。但你是否曾苦恼于如何将这些冰冷的数据转化为直观、吸引人的视觉盛宴? 🔥 欢迎来到《pyecharts图形绘制大师班》 �…...

大白话前端性能优化,常见方法有哪些?

大白话前端性能优化&#xff0c;常见方法有哪些&#xff1f; 咱来唠唠前端性能优化&#xff0c;其实就是想办法让网页打开得更快、用起来更流畅&#xff0c;就跟给汽车做保养让它跑得更顺溜一样。下面详细说说常见的优化方法&#xff1a; 压缩代码 CSS 压缩&#xff1a;CSS …...

IP属地是通过卫星定位的吗?如何保护用户隐私

在数字时代&#xff0c;网络空间成为了人们日常生活不可或缺的一部分。随着社交媒体、在线服务等平台的兴起&#xff0c;用户IP属地信息的重要性日益凸显。然而&#xff0c;关于IP属地是如何确定的&#xff0c;尤其是是否通过卫星定位这一问题&#xff0c;却常常引发公众的疑问…...

Vue3+Node/Express支付宝沙箱支付与确认支付

Vue3Node/Express支付宝沙箱支付与确认支付 支付宝沙箱配置进入沙箱选择自定义密钥 密钥工具下载生成密钥格式转换 自定义密钥设置Express安装依赖项目目录创建alipay.js请求&#xff08;打开支付&#xff09;代码router/pay.jsapp.js 前端代码前端封装接口前端调用 实现支付查…...

什么是大语言模型

大语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;是一种基于深度学习技术的人工智能模型&#xff0c;旨在理解和生成人类语言。以下是大语言模型的详细介绍&#xff1a; 一、基本概念 大语言模型通常包含数百亿甚至数千亿个参数&#xff0c;通过在海量…...

本地部署Embedding模型API服务的实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法大赛评委,编写微软OpenAI考试认证指导手册。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。授权多项发明专利。对机器学…...

postgresql postgis扩展相关

项目 下载地址 http://rpmfind.net/linux/rpm2html/search.php?queryprotobuf(x86-64) Postgis Index of /postgis/source/ proj4 Index of /proj/ geos Index of /geos/ libxml2 ftp://xmlsoft.org/libxml2/ Index of /sources Json-c Releases json-c/json-c G…...

FFmpeg-chapter3-读取视频流(原理篇)

ffmpeg网站&#xff1a;About FFmpeg 1 库介绍 &#xff08;1&#xff09;libavutil是一个包含简化编程函数的库&#xff0c;包括随机数生成器、数据结构、数学例程、核心多媒体实用程序等等。 &#xff08;2&#xff09;libavcodec是一个包含音频/视频编解码器的解码器和编…...

入门基础项目(SpringBoot+Vue)

文章目录 1. css布局相关2. JS3. Vue 脚手架搭建4. ElementUI4.1 引入ElementUI4.2 首页4.2.1 整体框架4.2.2 Aside-logo4.2.3 Aside-菜单4.2.4 Header-左侧4.2.5 Header-右侧4.2.6 iconfont 自定义图标4.2.7 完整代码 4.3 封装前后端交互工具 axios4.3.1 安装 axios4.3.2 /src…...

C#调用CANoeCLRAdapter.dll文章(二)

一、引言 在上一篇指南中&#xff0c;我们介绍了如何通过C#调用CANoeCLRAdapter.dll实现基础功能&#xff0c;包括COM接口操作、DLL导入和PANL面板集成。本文将进一步探讨高级功能开发&#xff0c;涵盖事件驱动编程、CAPL脚本双向通信以及异步任务处理&#xff0c;帮助开发者构…...

ai大模型自动化测试-TensorFlow Testing 测试模型实例

AI大模型自动化测试是确保模型质量、可靠性和性能的关键环节,以下将从测试流程、测试内容、测试工具及测试挑战与应对几个方面进行详细介绍: 测试流程 测试计划制定 确定测试目标:明确要测试的AI大模型的具体功能、性能、安全性等方面的目标,例如评估模型在特定任务上的准…...

QT——c++界面编程库

非界面编程 QT编译的时候&#xff0c;依赖于 .pro 配置文件&#xff1a; SOURCES: 所有需要参与编译的 .cpp 源文件 HEADERS:所有需要参与编译的.h 头文件 QT&#xff1a;所有需要参与编译的 QT函数库 .pro文件一旦修改&#xff0c;注意需要键盘按 ctrls 才能加载最新的配置文…...

postman--接口测试工具安装和使用教程

postman–接口测试工具 postman是一款支持http协议的接口调试与测试工具&#xff0c;其主要特点就是功能强大&#xff0c;使用简单且易用性好 。 无论是开发人员进行接口调试&#xff0c;还是测试人员做接口测试&#xff0c;postman都是我们的首选工具之一 。 下面先通过一张…...

如何用python画一棵分形树

这个代码会生成一个彩色的分形树图案&#xff0c;可以通过调整draw_tree函数中的参数来改变树的形状和大小 import turtle import random# 递归函数绘制分形树 def draw_tree(branch_len, t):if branch_len > 5:t.color(random.choice(colors))t.pensize(branch_len / 10)t…...

【leetcode】二分查找专题

文章目录 1.二分查找1.题目2.解题思路3. 解题代码 2.在排序数组中查找元素的第一个和最后一个位置1.题目2.算法原理3. 代码 3.x的平方根1.题目2.代码 4.搜索插入位置1.题目2.解题思路3.解题代码 5.山脉数组的索引1.题目2.解题思路3. 代码 6.寻找峰值1.题目2.解题思路3.代码 7. …...

深度学习笔记17-马铃薯病害识别(VGG-16复现)

目录 一、 前期准备 1. 设置GPU 2. 导入数据 二、手动搭建VGG-16模型 1. 搭建模型 三、 训练模型 1. 编写训练函数 3. 编写测试函数 4. 正式训练 四、 结果可视化 1. Loss与Accuracy图 2. 指定图片进行预测 3. 模型评估 前言 &#x1f368; 本文为&#x1f517;365天深度学习训…...

【LeetCode】131.分割回文串

目录 题目描述输入输出示例及数据范围思路C 实现 题目描述 这道题目来自 LeetCode 131. 分割回文串。 题目描述如下&#xff1a; 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 输入输出示例及数据…...

【AIGC系列】5:视频生成模型数据处理和预训练流程介绍(Sora、MovieGen、HunyuanVideo)

AIGC系列博文&#xff1a; 【AIGC系列】1&#xff1a;自编码器&#xff08;AutoEncoder, AE&#xff09; 【AIGC系列】2&#xff1a;DALLE 2模型介绍&#xff08;内含扩散模型介绍&#xff09; 【AIGC系列】3&#xff1a;Stable Diffusion模型原理介绍 【AIGC系列】4&#xff1…...

基于C++“简单且有效”的“数据库连接池”

前言 数据库连接池在开发中应该是很常用的一个组件&#xff0c;他可以很好的节省连接数据库的时间开销&#xff1b;本文基使用C实现了一个简单的数据库连接池&#xff0c;代码量只有400行左右&#xff0c;但是压力测试效果很好&#xff1b;欢迎收藏 关注&#xff0c;本人将会…...

vulnhub靶场【kioptrix-4】靶机

前言 靶机&#xff1a;kioptrix-4&#xff0c;IP地址为192.168.1.75&#xff0c;后期IP地址为192.168.10.8 攻击&#xff1a;kali&#xff0c;IP地址为192.168.1.16&#xff0c;后期IP地址为192.168.10.6 都采用VMware虚拟机&#xff0c;网卡为桥接模式 这里的靶机&#xf…...

科普:ROC AUC与PR AUC

在评价二分类模型性能时&#xff0c;有许多评价指标&#xff0c;其中&#xff0c;有一对是用面积AUC&#xff08;Area Under the Curve&#xff09;做评价的&#xff1a;ROC AUC与PR AUC 本文我们对ROC AUC与PR AUC进行多维度对比分析&#xff1a; 一、定义与核心原理 维度RO…...

服务器IPMI用户名、密码批量检查

背景 大规模服务器部署的时候&#xff0c;少不了较多的网管和监测平台&#xff0c;这些平台会去监控服务器的性能、硬件等指标参数&#xff0c;为了便于管理和控制&#xff0c;则需要给服务器IPMI带外管理添加较多的用户&#xff0c;这就需要对较多的服务器检查所对应的IPMI用…...

51单片机中reg52.h与regx52.h在进行位操作时的不同

reg52.h中不能使用例如 P2_0;这样的定义 而只能使用 P2^0;这样的定义 但是都不可以对位进行直接赋值操作&#xff1b; 而 regx52.h中可以使用 P2_0和P2^0&#xff1b;但是只有使用下划线的才可以对位进行赋值操作 例如P2_0 1; 但不可以是P2^0 1; 在 C 语言中&#xff0c;…...

Apollo Cyber 学习笔记

目录 0 Introduction What Why Advantage 1 Example 2 Concept 3 Flow Chart 4 Module 4.1 Transport 4.1.1 Share Memory 4.1.1.1 Segment 4.1.1.1.1 State 4.1.1.1.2 Block 4.1.1.1.3 Common 4.1.1.2 Notifier 4.1.1.2.1 ConditionNotifier 4.1.1.2.2 Multi…...

【Electron入门】进程环境和隔离

目录 一、主进程和渲染进程 1、主进程&#xff08;main&#xff09; 2、渲染进程&#xff08;renderer&#xff09; 二、预加载脚本 三、沙盒化 为单个进程禁用沙盒 全局启用沙盒 四、环境访问权限控制&#xff1a;contextIsolation和nodeIntegration 1、contextIsola…...

拉链表介绍

拉链表 是处理 缓慢变化维&#xff08;SCD&#xff09; 的一种常用方法&#xff0c;特别适用于需要保留历史记录的场景。以下是拉链表的详细说明及实现方法&#xff1a; 1. 什么是拉链表&#xff1f; 拉链表是一种用于记录维度数据历史变化的表结构&#xff0c;通过 开始时间 …...

Spring Boot 日志配置与常见问题解析(详解)

目录 Spring Boot 日志配置与常见问题解析引言什么是日志&#xff1f;日志的重要性日志使用打印日志 日志框架介绍日志格式的说明⽇志级别日志级别的分类日志级别的使用 Spring Boot 日志配置1. 设置日志级别和格式2. 配置日志收集器3. 查看和分析日志4.日志的持久化5.设置日志…...

-bash: lsof: command not found

一、问题说明 执行如下命令时报错&#xff1a; # lsof |grep deleted > deleted_file -bash: lsof: command not found二、处理方法 # yum -y install lsof安装完成后可成功执行上面的命令。...

PC 端连接安卓手机恢复各类数据:安装、操作步骤与实用指南

软件介绍 这款用于恢复安卓手机数据的软件&#xff0c;虽运行在 PC 端&#xff0c;却专为安卓手机数据恢复打造&#xff0c;使用时得用数据线把手机和电脑连接起来。它的功能相当强大&#xff0c;能帮你找回安卓手机里已删除的短信、联系人、通话记录、文档&#xff0c;还有照…...

ES、OAS、ERP、电子政务、企业信息化(高软35)

系列文章目录 ES、OAS、ERP、电子政务、企业信息化 文章目录 系列文章目录前言一、专家系统&#xff08;ES&#xff09;二、办公自动化系统&#xff08;OAS&#xff09;三、企业资源规划&#xff08;ERP&#xff09;四、典型信息系统架构模型1.政府信息化和电子政务2.企业信息…...

android智能指针android::sp使用介绍

android::sp 是 Android 中的智能指针&#xff08;Smart Pointer&#xff09;的实现&#xff0c;用于管理对象的生命周期&#xff0c;避免手动管理内存泄漏等问题。它是 Android libutils 库中重要的一部分&#xff0c;常用于管理继承自 android::RefBase 的对象。 与标准库中…...

推荐一款最新开源,基于AI人工智能UI自动化测试工具!支持自然语言编写脚本!

随着互联网技术的飞速发展&#xff0c;Web应用越来越普及&#xff0c;前端页面也越来越复杂。为了确保产品质量&#xff0c;UI自动化测试成为了开发过程中不可或缺的一环。然而&#xff0c;传统的UI自动化测试工具往往存在学习成本高、维护困难等问题。特别是UI 自动化脚本里往…...

DeepSeek05-大模型WebUI

一、说明&#xff1a; 将DeepSeek部署到前台Web界面的方法主要有以下几种推荐方案&#xff0c;涵盖开源工具、第三方客户端及特定场景适配方案&#xff1a; Open WebUIChatbox AICherry StudioSillyTavern 二、Open WebUI 安装配置教程 特点&#xff1a;Open WebUI 是一个开…...

自然语言处理NLP入门 -- 第八节OpenAI GPT 在 NLP 任务中的应用

在前面的学习中&#xff0c;我们已经了解了如何使用一些经典的方法和模型来处理自然语言任务&#xff0c;如文本分类、命名实体识别等。但当我们需要更强的语言生成能力时&#xff0c;往往会求助于更先进的预训练语言模型。OpenAI 旗下的 GPT 系列模型&#xff08;如 GPT-3、GP…...

FFmpeg av_read_frame 和iOS系统提供的 AVAudioRecorder 实现音频录制的区别

1. 第一种方式:使用 FFmpeg 的 av_read_frame 特点 底层实现:基于 FFmpeg,这是一个强大的多媒体处理库,直接操作音频流。灵活性:非常灵活,可以处理多种音频格式、编解码器和输入设备。复杂性:需要手动管理音频流、数据包(AVPacket)、内存释放等,代码复杂度较高。跨平…...

【区块链】深入理解区块链中的 Gas 机制

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 深入理解区块链中的 Gas 机制一、Gas 的基本概念1.1 为什么需要 Gas&#xff1f…...

2020 年英语(一)考研真题 笔记(更新中)

Section I Use of English&#xff08;完型填空&#xff09; 原题 Directions&#xff1a;Read the following text. Choose the best word (s) for each numbered blank and mark A, B, C or D on the ANSWER SHEET. (10 points) Even if families are less likely to si…...

mamba_ssm和causal-conv1d详细安装教程

1.前言 Mamba是近年来在深度学习领域出现的一种新型结构&#xff0c;特别是在处理长序列数据方面表现优异。在本文中&#xff0c;我将介绍如何在 Linux 系统上安装并配置 mamba_ssm 虚拟环境。由于官方指定mamba_ssm适用于 PyTorch 版本高于 1.12 且 CUDA 版本大于 11.6 的环境…...

leetcode-442.数组中重复的数据

leetcode-442.数组中重复的数据 文章目录 leetcode-442.数组中重复的数据1.题目描述&#xff1a;数组中重复的数据2.第一次代码提交&#xff1a;(不符合仅使用常量额外空间)3.最终代码提交&#xff1a;只使用常数额外空间、时间复杂度为 O(n) 的做法&#xff0c;即“标记法” 1…...

UniApp 按钮组件 open-type 属性详解:功能、场景与平台差异

文章目录 引言一、open-type 基础概念1.1 核心作用1.2 通用使用模板 二、主流 open-type 值详解2.1 contact - 客服会话功能说明平台支持代码示例 2.2 share - 内容转发功能说明平台支持注意事项 2.3 getUserInfo - 获取用户信息功能说明平台支持代码示例 2.4 getPhoneNumber -…...

Android13修改多媒体默认音量

干就完了! 设置音量为最大音量,修改如下: /framework/base/media/java/android/media/AudioSystem.java/** hide */public static int[] DEFAULT_STREAM_VOLUME new int[] {4, // STREAM_VOICE_CALL7, // STREAM_SYSTEM5, // STREAM_RING-5, // STREAM_MUSIC15, // STREAM…...

【银河麒麟高级服务器操作系统】服务器测试业务耗时问题分析及处理全流程分享

更多银河麒麟操作系统产品及技术讨论&#xff0c;欢迎加入银河麒麟操作系统官方论坛 https://forum.kylinos.cn 了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer…...

HTTP 请求时传递多部分表单数据

HTTP 请求时传递多部分表单数据&#xff08;multipart/form-data&#xff09; --data-raw $------demo11111\r\nContent-Disposition: form-data; name"Filedata"; filename"截屏2025-02-27 15.45.46.png"\r\nContent-Type: image/png\r\n\r\n\r\n------d…...

【Python环境】配置极简描述

241220 241220 241220 Python环境配置 下载Python 稳定版本&#xff1a;Stable Releases【3.12.3】 下载地址&#xff1a;Python Releases for Windows | Python.org. 配环境 注意勾上Add Python 3.x to PATH&#xff0c;然后点“Install Now”即可完成安装。 配置完成&…...

1. HTTP 数据请求

相关资源&#xff1a; 图片素材&#x1f4ce;图片素材.zip 接口文档 1. HTTP 数据请求 什么是HTTP数据请求&#xff1a; (鸿蒙)应用软件可以通过(鸿蒙)系统内置的 http 模块 和 Axios&#xff0c;通过 HTTP 协议和服务器进行通讯 学习核心Http请求技术: Http模块 - 属于鸿…...

基于深度学习+NLP豆瓣电影数据爬虫可视化推荐系统

博主介绍&#xff1a;资深开发工程师&#xff0c;从事互联网行业多年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有…...

Apache Spark中的依赖关系与任务调度机制解析

Apache Spark中的依赖关系与任务调度机制解析 在Spark的分布式计算框架中,RDD(弹性分布式数据集)的依赖关系是理解任务调度、性能优化及容错机制的关键。宽依赖(Wide Dependency)与窄依赖(Narrow Dependency)作为两种核心依赖类型,直接影响Stage划分、Shuffle操作及容…...

SEO炼金术(4)| Next.js SEO 全攻略

在上一篇文章 SEO炼金术&#xff08;3&#xff09;| 深入解析 SEO 关键要素 中&#xff0c;我们深入解析了 SEO 关键要素&#xff0c;包括 meta 标签、robots.txt、canonical、sitemap.xml 和 hreflang&#xff0c;并探讨了它们在搜索引擎优化&#xff08;SEO&#xff09;中的作…...

DeepSeek开源周,第五弹再次来袭,3FS

Fire-Flyer 文件系统&#xff08;3FS&#xff09;总结&#xff1a; 一、核心特点 3FS 是一个专为 AI 训练和推理工作负载设计的高性能分布式文件系统&#xff0c;利用现代 SSD 和 RDMA 网络&#xff0c;提供共享存储层&#xff0c;简化分布式应用开发。其主要特点包括&#xf…...