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

linux多线(进)程编程——(6)共享内存

前言

话说进程君的儿子经过父亲点播后就开始闭关,它想要开发出一种全新的传音神通。他想,如果两个人的大脑生长到了一起,那不是就可以直接知道对方在想什么了吗,这样不是可以避免通过语言传递照成的浪费吗?
下面就是它的设计思路。

共享内存

进程间的通信手段分别有:管道,共享内存,消息队列,信号,信号量,套接字。今天我们将学习第二种方式,共享内存(Shared Memory)。这也是进程间通信最为高效的方式。
共享内存的原理其实很简单,进程间由于操作系统的内存映射,实现了物理内存的隔离。如果有一种方法可以让两个进程的内存同时映射到一块物理内存上,那么这块内存内的数据就对两个进程全部可见了。我们也可以直接通过指针访问对应的内存空间实现进程间数据的高效传输。
共享内存的原理示意图

共享内存的使用

linux系统为共享内存提供了以下几个函数接口,它们以shm开头,表示Shared Memory
(1)向系统申请获取共享

int shmget(ket_t __key, size_t __size, int __shmflg);

这个函数用于向系统申请一块共享内存。
__key:共享内存的键值,这个键值用于在不同进程间标识为一的共享功能区
__size:共享内存的大小(单位:字节),对于相同键值,大小要保持一致
__shmflg:共享内存申请方式
return val:返回共享内存的ID号

(2)挂载共享内存

void* shmat(int __shmid, const void *shmaddr, int __shmflg);

这个函数用于将共享内存挂载到进程内部的虚拟地址上,使用这个函数后就可以直接使用指针操作共享内存
__shmid:共享内存ID
__shmaddr:希望挂载到地址,为NULL由系统自行分配
__shmflg:一般值为0即可
return val:返回共享内存在进程中的虚拟地址的值

(3)分离共享内存

int shmdt(const void *__shmaddr);

这个函数用于将共享内存与进程的虚拟内存分离。
__shmaddr:指向共享内存的虚拟地址

(4)控制共享内存

int shmctl(int __shmid, int __command, struct shmid_ds *__buf);

用来对共享内存执行一些操作,用来告诉系统释放共享内存
__shmid:共享内存ID
__command:要执行的指令,为IPC_RMID时用来告诉系统释放共享内存
__buf:为NULL即可(高级用法一般用不到)

代码案例

运行两个程序,申请共享内存后一个写入hello world,另一个程序读取。
pro1.c:写入数据

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/shm.h>
#include <string.h>#define SHMSIZE 20		// 共享内存大小,与pro2.c保持一致,否则一定报错int main() {int ID = shmget((key_t)1, SHMSIZE, 0666|IPC_CREAT);		// 申请共享内存,键值为1,与pro2.c保持一致char* shm_addr = shmat(ID, NULL, 0);	// 挂载到进程的虚拟内存地址上char str[SHMSIZE] = "hello, world!";	memcpy(shm_addr, str, sizeof(str));		// 使用指针 shm_addr 操作共享内存shmdt(shm_addr);						// 分离共享内存return 0;
}

pro2.c读取数据

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/shm.h>#define SHMSIZE 20 		// 共享内存大小,与pro1.c保持一致,否则一定报错int main() {int ID = shmget((key_t)1, SHMSIZE, 0666|IPC_CREAT);		// 申请共享内存,键值为1,与pro2.c保持一致char* shm_addr = shmat(ID, NULL, 0);printf("%s\n", shm_addr); 		// 打印数据shmdt(shm_addr);shmctl(ID, IPC_RMID, NULL);		// 释放共享内存,不然即使关闭程序也会内存泄露,共享内存不会回收return 0;
}

运行结果

lol@hyl:~/work/linux_study/Shared_memory/shm_fun$ gcc -o p1 pro1.c
lol@hyl:~/work/linux_study/Shared_memory/shm_fun$ gcc -o p2 pro2.c
lol@hyl:~/work/linux_study/Shared_memory/shm_fun$ ./p1
lol@hyl:~/work/linux_study/Shared_memory/shm_fun$ ./p2
hello, world!

进程2顺利输出hello, world!

注意事项

(1)共享内存操作不规范导致冲突

当共享内存使用不规范,例如发生(1)大小不匹配、(2)未调用shmctl(ID, IPC_RMID, NULL)释放内存等情况时,系统会出现内存报错。 此时程序无法再次运行!即使关闭编译器后再次打开,仍然无法运行,因此共享内存仍然在系统内。
应对这种情况,需要在命令行输入

ipcs -m

之后终端会显示:


------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x00000001 6          hyl        666        20         0    

在这里我们可以看到我们申请的键值为1的ID号为6的共享内存,大小为20个字节,正是它的存在让我们无法再次以键值1申请共享内存,我们需要手动释放这块内存。

在命令行输入

ipcrm -m 6

最后的数字是共享内存的ID,删除后我们就可以再次运行程序了,要记得操作规范,及时在程序中释放哦!

共享内存的进程间安全问题

申请共享内存后,当两个进程想要同时向内存中写入数据会发生什么?
这个问题是一个很复杂的问题,涉及到进程间的安全性问题,学名叫进程间竞态竞争。我们将在信号量的学习中解决它,这里不过多赘述。
(我们展示的程序逻辑很简单,而且有先后运行顺序,不需要担心出现进程间冲突的问题)

小结

这节课我们学习了进程间通信的最高效手段——共享内存。
主要知识点:
(1)共享内存的四个接口函数:shmget、shmat,shmdt、shmctl
(2)共享内存的操作注意事项:大小一致,即使回收
(3)命令行中查看共享内存的指令(ipcs -m)与命令行中删除共享内存的指令(ipcrm -m shmid)

下一节我们将学习:消息队列

结束语

进程君的儿子在领悟到共享内存后,在修真界名声大振,隐隐有赶超其父亲的趋势。被人尊称为:进程公。(青出于蓝胜于蓝)

番外:什么!共享内存的另一种申请方式?

相关文章:

linux多线(进)程编程——(6)共享内存

前言 话说进程君的儿子经过父亲点播后就开始闭关&#xff0c;它想要开发出一种全新的传音神通。他想&#xff0c;如果两个人的大脑生长到了一起&#xff0c;那不是就可以直接知道对方在想什么了吗&#xff0c;这样不是可以避免通过语言传递照成的浪费吗&#xff1f; 下面就是它…...

Allpairs工具下载及操作流程(联动Deepseek)

目录 一、Allpairs工具下载及操作流程二、Allpairs工具使用易错问题 Allpairs工具产生的原因 Allpairs工具的产生源于软件测试领域对高效组合测试方法的迫切需求&#xff0c;其核心目标是解决传统测试方法在多因素组合场景下用例数量爆炸和测试效率低下的问题。 一、Allpairs工…...

wkhtmltopdf 实现批量对网页转为图片的好工具,快速实现大量卡片制作

欢迎来到涛涛聊AI 1、需求痛点 在学习当中经常遇到一些知识点&#xff0c;想和大家分享。但只有文本形式&#xff0c;很多人不愿意去阅读&#xff0c;也看不到重点。 如果自己去单独设计页面版式&#xff0c;又太浪费时间。那就想着有没有一种方法&#xff0c;可以把一个知识…...

case客户续保预测中用到的特征工程、回归分析和决策树分析的总结

文章目录 [toc]1. 回归分析概述1.1 基本概念1.2 与分类的区别 2. 常见回归算法2.1 线性回归2.2 决策树回归2.3 逻辑回归&#xff08;Logistic Regression&#xff09;2.3 其他算法补充&#xff1a;通俗版&#xff1a;决策树 vs 随机森林&#x1f333; 决策树&#xff1a;像玩「…...

最新如何在服务器中解决FFmpeg下载、安装和配置问题教程(Linux|Windows|Mac|Ubuntu)

最新如何在服务器中解决FFmpeg下载、安装和配置问题教程&#xff08;Linux&#xff5c;Windows&#xff5c;Mac&#xff5c;Ubuntu&#xff09; 摘要&#xff1a; FFmpeg是一个强大的开源工具&#xff0c;广泛应用于音视频处理&#xff0c;支持格式转换、视频剪辑、流媒体推送…...

vue webSocket

vue webSocket 一、vue2 webSocketwebSocket.jsvue2 二、vue3 webSocket tswebSocket.tsvue3 一、vue2 webSocket webSocket.js export default {data() {return {websock: null, // 建立的连接&#xff0c;存websocket实例化的lockReconnect: false, // 是否真正建立连接…...

Flask+Influxdb+grafna构建电脑性能实时监控系统

Influx下载地址&#xff0c;这里下载了以下版本influxdb-1.8.5_windows_amd64.zip 运行前需要先启动Influx数据库&#xff1a; 管理员方式运行cmd->F:->cd F:\influxdb\influxdb-1.8.5-1->influxd -config influxdb.conf&#xff0c;以influxdb.conf配置文件启动数…...

【golang/jsonrpc】go-ethereum中json rpc初步使用(websocket版本)

说在前面 操作系统&#xff1a;win11 wsl2go-ethereum版本&#xff1a;1.15.8 关于json-rpc 官网 server 定义方法type CalculatorService struct{}func (s *CalculatorService) Add(a, b int) int {return a b }func (s *CalculatorService) Div(a, b int) (int, error) {…...

【C++】 —— 笔试刷题day_15

刷题day_15&#xff0c;继续加油&#xff01;&#xff01;&#xff01; 一、平方数 题目解析 题目给出一个数&#xff0c;让我们找到离它最近的一个平方数&#xff0c;然后输出即可。 算法思路 这道题总体来说还是非常简单的。 这里先来看一种思路&#xff0c;就是从1开始找…...

网站备案详解

当小型网站开发完毕具备上线条件后&#xff0c;需要完成域名映射与相关备案&#xff0c;才能合法运维。就像婴儿出生后&#xff0c;要开出生证明并去派出所上户口一样&#xff0c;备案后就是有“户口”的网站啦。具体效果见&#xff1a;CodingLife 一&#xff1a;服务器部署 …...

IPV6应用最后的钥匙:DDNS-GO 动态域名解析工具上手指南--家庭云计算专家

DDNS-GO作为一款轻量级开源工具&#xff0c;其IPv6功能通过自动化动态域名解析&#xff0c;有效解决了家庭网络因运营商动态分配IPv6地址导致的访问难题。用户无需复杂配置&#xff0c;即可将冗长的IPv6地址绑定至易记域名&#xff0c;并实时同步IP变化&#xff0c;显著提升了N…...

ubuntu 系统安装Mysql

安装 mysql sudo apt update sudo apt install mysql-server 启动服务 sudo systemctl start mysql 设置为开机自启 sudo systemctl enable mysql 查看服务状态 &#xff08;看到类似“active (running)”的状态信息代表成功&#xff09; sudo systemctl status mysql …...

Go:方法

方法声明 type point struct { X, Y float64 }// 普通函数 func Distance(p, q Point) float64 {return math.Hypot(q.x - p.x, q.y - p.Y) }// Point类型的方法 func (p Point) Distance(q Point) float64 {return math.Hypot(q.x - p.x, q.y - p.Y) }方法声明与普通函数声…...

十四种逻辑器件综合对比——《器件手册--逻辑器件》

目录 逻辑器件 简述 按功能分类 按工艺分类 按电平分类 特殊功能逻辑器件 应用领域 详尽阐述 1 逻辑门 一、基本概念 二、主要类型 三、实现方式 四、应用领域 2 反相器 工作原理 基本功能 主要应用 常见类型 特点 未来发展趋势 3 锁存器 基本概念 工作原理 主要类型…...

[网鼎杯 2022 青龙组]fakeshell

这个题&#xff0c;我们查壳之后是upx壳。 但是当我们用upxunpack解包的时候我们解不出来。 说明有人动过这个包。 然后我们打开010eider&#xff0c;修改他的魔改 将此处&#xff0c;我们改成UPX我们在解包就可以了。然后我重新使用upxunpack 之后我们成功得到未加密的文件…...

vivado + modelsim 仿真:Post-Synthesis Timing Simulation

Vivado 结合Modelsim 实现综合后仿真的一种方法 Post-Synthesis Timing Simulation 使用Vivado 生成仿真所需文件创建Modelsim工程参考文档 使用Vivado 生成仿真所需文件 Vivado simulation 中可勾选Generate simulation scripts only;勾选-sdf_anno; 在testbanch文件中例化gl…...

可能存在特殊情况,比如控制台显示有延迟、缓冲问题等影响了显示顺序。

从控制台输出看&#xff0c;正常逻辑应是先执行 System.out.println(" 未处理异常演示 "); 输出对应文本&#xff0c;再因 arr 为 null 访问 length 触发 NullPointerException 输出异常信息。可能存在特殊情况&#xff0c;比如控制台显示有延迟、缓冲问题等影响…...

使用Python建模量子隧穿

引言 量子隧穿是量子力学中的一个非常有趣且令人神往的现象。在经典物理学中,我们通常认为粒子必须克服一个势垒才能通过它。但是,在量子力学中,粒子有时可以“穿越”一个势垒,即使它的能量不足以克服这个势垒。这种现象被称为“量子隧穿”。今天,我们将通过 Python 来建…...

Python-控制语句

控制语句 控制语句和逻辑思维 控制语句:把语句组合成能完成一定功能的小逻辑模块分类:顺序、选择、循环“顺序结构”:代表“先执行a,再执行b”的逻辑“条件判断结构”:代表“如果…,则…”的逻辑“循环结构”:代表“如果…则重复执行…”的逻辑条件判断结构 选择结构通…...

库学习04——numpy

一、基本属性 二、 创建数组 &#xff08;一&#xff09;arange a np.arange(10,20,2) # [10,12,14,16,18] 只有一个参数n的话&#xff0c;默认是从0到n-1的一维数组。 &#xff08;二&#xff09;自定义reshape a np.arange(12).reshape((3,4)) [[ 0 1 2 3][ 4 5 …...

DeepSeek在应急救援领域的应用解决方案

DeepSeek在应急救援领域的应用解决方案 一、引言 1.1 应急救援领域现状 近年来&#xff0c;我国应急管理工作全面加强&#xff0c;取得了显著成效。然而&#xff0c;一系列重特大灾害事故暴露出我国应急管理体系存在诸多问题短板。例如&#xff0c;在责任落实、应急处突、法…...

【HCIP】GRE VPN实验笔记

一、实验拓扑 二、实验要求 1、按照图示配置IP地址 2、在R1和R3上配置默认路由使公网区域互通 3、在R1和R3上配置GRE VPN&#xff0c;使两端私网能够互相访问&#xff0c;Tunnel口IP地址如图 4、在R1和R3上配置RIPv2或者ospf或者静态&#xff0c;来传递两端私网路由 三、实…...

ChatRex: Taming Multimodal LLM for Joint Perception and Understanding 论文理解和翻译

一、TL&#xff1b;DR MLLM在感知方面存在不足&#xff08;远远比不上专家模型&#xff09;&#xff0c;比如Qwen2-VL在coco上recall只有43.9%提出了ChatRex&#xff0c;旨在从模型设计和数据开发两个角度来填补这一感知能力的缺口ChatRex通过proposal边界框输入到LLM中将其转…...

10min速通Linux文件传输

实验环境 在Linux中传输文件需要借助网络以及sshd&#xff0c;我们可通过systemctl status sshd来查看sshd状态 若服务未开启我们可通过systemctl enable --now sshd来开启sshd服务 将/etc/ssh/sshd_config中的PermitRootLogin 状态修改为yes 传输文件 scp scp &#xff08;Sec…...

CE、NCE、InfoNCE的演变过程

CE、NCE、InfoNCE的演变过程及数学推导和关系 在机器学习和深度学习中&#xff0c;交叉熵&#xff08; C E CE CE&#xff09;、噪声对比估计&#xff08; N C E NCE NCE&#xff09;和信息噪声对比估计&#xff08; I n f o N C E InfoNCE InfoNCE&#xff09;是三个紧密相关…...

在Vue项目的引入meting-js音乐播放器插件

开源项目&#xff1a;https://github.com/swzaaaaaaa/NBlog 1、开源项目中音乐播放插件的使用流程 步骤1&#xff1a;下载meting-js相关文件 在MetingJS官方仓库或其他可靠的CDN获取meting-js的JavaScript文件以及相关依赖&#xff08;如APlayer的文件&#xff09;。将它们下…...

rapidocr 2.0 在线demo来了

引言 今日北京大风&#xff0c;大家都窝在家里&#xff0c;自己也趁着周末更新了RapidOCR在线demo&#xff0c;适配rapidocr2.0系列。 rapidocr2.0支持4个推理引擎&#xff08;ONNRuntime、OpenVino、PaddlePaddle和PyTorch&#xff09;&#xff0c;且整理了文本检测和文本识…...

Compose笔记(十五)--进度条

这一节了解一下Compose中的进度条&#xff0c;有两种类型的进度条可供使用&#xff0c;分别是线性进度条&#xff08;LinearProgressIndicator&#xff09;和圆形进度条&#xff08;CircularProgressIndicator&#xff09;&#xff0c;每种进度条又可分为确定模式和不确定模式。…...

图谱可视化的海洋生物信息查询网站的设计与实现(springboot+ssm+vue)含文档

图谱可视化的海洋生物信息查询网站的设计与实现(springbootssmvue)含文档 该系统是一个图谱可视化的海洋生物信息查询网站&#xff0c;主要功能包括海洋动物、海洋植物、生物图鉴、保护生物和海洋生物分布等模块&#xff1b;用户可以通过系统首页访问这些模块&#xff1b;在海…...

目标追踪Hyperspectral Adapter for Object Tracking based on Hyperspectral Video

论文作者&#xff1a;Long Gao,Yunhe Zhang,Langkun Chen,Yan Jiang,Weiying Xie,Yunsong Li 作者单位&#xff1a;Xidian University;the University of Sheffield 论文链接&#xff1a;http://arxiv.org/abs/2503.22199v1 内容简介&#xff1a; 1&#xff09;方向&#x…...

【HD-RK3576-PI】Linux制作deb包的方法

1.什么是deb包 &#xff1f; DEB包是Debian及其衍生Linux发行版&#xff08;如Ubuntu、Linux Mint等&#xff09;使用的软件包格式。DEB包主要用于简化软件的安装、更新和卸载过程。它实际上是一个归档文件&#xff0c;通常包含了两个主要部分&#xff1a; 数据压缩包&#xf…...

FileInputStream 详解与记忆方法

FileInputStream 详解与记忆方法 一、FileInputStream 核心概念 FileInputStream 是 Java 中用于从文件读取原始字节的类&#xff0c;继承自 InputStream 抽象类。 1. 核心特点 特性说明继承关系InputStream → FileInputStream数据单位字节&#xff08;8bit&#xff09;用…...

什么是回表?哪些数据库存在回表?

目录 一、什么是回表1. 回表的核心流程2. 示例说明3. 回表的性能问题4. 总结 二、哪些数据库会有回表1. MySQL&#xff08;InnoDB&#xff09;2. Oracle3. 其他数据库&#xff08;如 SQL Server、PostgreSQL&#xff09;4. 总结 三、非聚集索引与聚集索引的区别及产生原因1. 聚…...

跨平台开发的挑战与突破:Java开发工具的探索与实践!

全文目录&#xff1a; 开篇语前言摘要概述源码解析代码实例代码解析代码解析1. import java.io.File;2. public class CrossPlatformFileManager3. public static void main(String[] args)4. String filePath "example.txt";5. File file new File(filePath);6. *…...

JDK的卸载与安装

卸载JDK 删除java的1安装目录 卸载JAVA_HOME 删除path下关于java的路径 java -version查看 安装JDK 百度搜索JDK&#xff0c;找到下载地址 同意协议 下载电脑对应版本 双击安装 记住安装路径 配置环境变量 我的电脑–>右键–>属性–>高级系统设置 环境变…...

CyclicBarrier 基本用法

CyclicBarrier 基本用法 简介 CyclicBarrier 是 Java 并发包&#xff08;java.util.concurrent&#xff09;中的一个同步辅助类。它允许一组线程相互等待&#xff0c;直到到达某个公共屏障点&#xff08;common barrier point&#xff09;。只有当所有参与的线程都到达屏障点…...

限流、降级、熔断、隔离?

在微服务架构中&#xff0c;服务限流、降级、熔断和隔离是保障系统高可用性的核心手段&#xff0c;但它们解决的问题和应用场景不同。以下是它们的区别、解决方案和实际案例的详细说明&#xff1a; 一、服务限流&#xff08;Rate Limiting&#xff09; 定义&#xff1a;通过限…...

asm汇编源代码之-字库转换程序

将标准的16x16点阵汉字库(下载16x16汉字库)转换成适合VGA文本模式下显示的点阵汉字库 本程序需要调用file.asm中的子程序,所以连接时需要把file连接进来,如下 C:\> tlink chghzk file 调用参数描述如下 C:\> chghzk ; 无调用参数,转换标准库文件(SRC16.FNT)为适合VGA…...

深入浅出:信号灯与系统V信号灯的实现与应用

深入浅出&#xff1a;信号灯与系统V信号灯的实现与应用 信号灯&#xff08;Semaphore&#xff09;是一种同步机制&#xff0c;用于控制对共享资源的访问。在多线程或多进程环境下&#xff0c;信号灯能够帮助协调多个执行单元对共享资源的访问&#xff0c;确保数据一致性与程序…...

定时器介绍及简单应用

定时器介绍及简单应用 文章目录 定时器介绍及简单应用1.定时器基本介绍1.1MSP430的四种定时器&#xff1a; 2.定时器A&#xff08;Timer_A)2.1特点2.2寄存器的命名2.3寄存器表格2.4计数器原理说明2.4.1时钟源、分频器、计数器、工作模式2.4.2计数器复位 2.5定时器中断2.5.1定时…...

运行一次性任务与定时任务

运行一次性任务与定时任务 文章目录 运行一次性任务与定时任务[toc]一、使用Job运行一次性任务1.创建一次性任务2.测试一次性任务3.删除Job 二、使用CronJob运行定时任务1.创建定时任务2.测试定时任务3.删除CronJob 一、使用Job运行一次性任务 1.创建一次性任务 &#xff08;…...

TypeScript入门

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…...

MySQL数据库备份与恢复详解

在数据库管理中&#xff0c;数据的备份与恢复是至关重要的一环。对于MySQL数据库&#xff0c;定期备份不仅能防止数据丢失&#xff0c;还能在发生故障时快速恢复数据库。本文将详细介绍MySQL数据库的备份与恢复方法&#xff0c;覆盖所有常用备份和恢复方式&#xff0c;帮助大家…...

【c语言】猜凶手

日本某地发生了一件谋杀案&#xff0c;警察通过排查确定杀人凶手必为4个嫌疑犯的一个。 以下为4个嫌疑犯的供词: A说&#xff1a;不是我。 B说&#xff1a;是C。 C说&#xff1a;是D。 D说&#xff1a;C在胡说 已知3个人说了真话&#xff0c;1个人说的是假话。 现在请根据这些信…...

Java学习打卡-Day25-注解和反射、Class类

注解&#xff08;JDK5引入&#xff09; 什么是注解&#xff1f; Java注解&#xff08;Annotation&#xff09;&#xff0c;也叫元数据。一种代码级别的说明&#xff0c;与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面&#xf…...

【愚公系列】《Python网络爬虫从入门到精通》048-验证码识别(滑动拼图验证码)

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...

CMake中add_custom_target用法详解

在 CMake 中&#xff0c;add_custom_target 是一个用于创建自定义构建目标的命令。它主要用于定义一些不生成文件&#xff0c;但需要执行的特定操作&#xff08;比如运行脚本、执行命令、触发其他构建步骤等&#xff09;。以下是它的核心用途和特点&#xff1a; 基本语法 add_…...

埃隆·马斯克如何通过开源创新塑造未来

李升伟 编译 埃隆马斯克的名字在多个行业回响——从电动汽车、太空探索到人工智能及更多领域。虽然许多人关注他革命性的公司&#xff08;如特斯拉、SpaceX、Neuralink和The Boring Company&#xff09;&#xff0c;但较少有人意识到他在开源软件运动中悄然却深远的影响力。本…...

大型语言模型中的工具调用(Function Calling)技术详解

一、引言 随着大型语言模型&#xff08;LLM&#xff09;能力的飞速发展&#xff0c;它们在自然语言理解、文本生成、对话交互等方面展现出了令人惊叹的表现。然而&#xff0c;LLM 本身并不具备执行外部操作的能力&#xff0c;比如访问网页、调用第三方 API、执行精确数学运算等…...

IKBC F108 白色背光普通版说明书

部分按键白色背光版和新的 RGB 版并不相同。比如灯光控制&#xff0c;新老款会有按键配置冲突的。 IKBC F108 白色背光款&#xff08;普通款&#xff09;按键说明​ ScrLk 倒计时定时器​ 使用 F1~F12 及 1~9 控制时间&#xff0c;设置完成按 Enter 确认&#xff0c;或按 En…...