什么是进程?
目录
冯诺依曼体系
操作系统(OperatorSystem)
设计OS的目的
进程
task_struct
操作
/proc文件夹
父子进程
创建子进程
了解进程之前,我们先说说冯诺依曼体系结构,这是计算机硬件方面的知识。
冯诺依曼体系
我们常见的计算机,如笔记本,各种服务器,都是由各种硬件组成的,而这些硬件都遵循这个体系结构。
存储器理解
存储器主要分为内存和外存。
内存:直接参与CPU运算,存放当前执行的程序和数据。
外存(如硬盘,U盘,固态硬盘等):作为内存的扩展,用于长期保存大量数据,需通过内存与CPU交互。
输入设备:包括键盘,⿏标,摄像头,网卡,磁盘等。
输出设备:显示器,打印机,磁盘,网卡等。
磁盘和网卡既不是单纯的输入设备,也不是单纯的输出设备,而是具有双重角色的存储介质。
中央处理器(CPU):含有运算器和控制器等。
注意:
- 我们这里的存储器(图中)主要指的是内存。
- 不考虑缓存情况,这⾥的CPU能且只能对内存进⾏读写,不能访问外设(输⼊或输出设备)。
- 外设(输⼊或输出设备)要输⼊或者输出数据,也只能写⼊内存或者从内存中读取。
- ⼀句话,所有设备都只能直接和内存打交道。
数据的流动其实就是拷贝,是从一个设备拷贝到另一个设备中,所以这个体系效率是由设备数据的拷贝决定的!
深入理解:
对于这个体系不能只停留在表面,我们必须要深入到数据流的理解。
举个例子:
我们在登陆qq和朋友发消息,这个消息数据是怎么流动的?而朋友又是怎么收到消息并且能看到的呢?
软件在运行之前,是在文件里,而文件在磁盘中,软件要运行,必须先要加载到内存中,也就是说我们登陆了qq,qq这个软件(程序)就已经加载到内存中了(从输入设备(这里是磁盘)数据流动到内存中),然后我们发送一个消息,这个数据是从键盘(输入设备)流动到内存中,数据再流动到网卡(输出设备),经过网络一系列操作,数据进入朋友计算机的输入设备(网卡),数据再流动到内存(朋友登陆qq,也是将qq加载到了内存中),最后流入显示器(输出设备)中,然后朋友就看见我们的消息了!
其实本质就是两台冯诺依曼体系在“聊天”。
只要我们稳稳理解这个体系,其实很多问题都能知道一个大概,只不过当中过程,细节等需要我们去不断学习和深究!
操作系统(OperatorSystem)
任何计算机系统都包含⼀个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:
- 内核(进程管理,内存管理,⽂件管理,驱动管理)
- 其他程序(例如函数库,shell程序等等)
我们不需要将OS看成有多么高大上,整个计算机软硬件架构中,操作系统的定位是:⼀款纯正的“搞管理”的软件。
其实就是一个利用c语言写的一个软件!
这也就是很多人说会c语言就会操作系统的原因,但是这种说法显然是片面的。
设计OS的目的
- 对下,与硬件交互,管理所有的软硬件资源。
- 对上,为用户程序(应⽤程序)提供⼀个良好的执⾏环境
这里的硬件部分就是我们前面讲的遵循冯诺依曼体系结构。
既然我们说操作系统它是一款管理软件,那它是如何管理硬件的?
面对这一个个众多的硬件,将它们管理起来,那么必然要用到数据结构中的知识!
这样一来,操作系统对硬件的管理,转变成对链表的增删查改!
先描述(类和对象),再组织(数据结构)。
这6个字,也就决定了C++,java等面对对象高级计算机语言的地位!
我们要访问操作系统,必须使用系统调用,为什么?
因为操作系统不相信任何人,那我们又需要去访问操作系统,怎么办?所以就提供了一个个系统调用,而系统调用其实就是一个个接口,更准确一点就是一个个c语言函数!当然也有部分指令和外壳等!所以说,我们只能通过库函数,指令,外壳访问操作系统!
当然并不是所有的库函数或者库文件,指令都封装了系统调用,比如:系统调用封装库(如C标准库的fopen
()
封装open()
系统调用),字符串处理函数(strcpy)、数学函数(sqrt)等,这些不涉及系统调用。
注意:
- 软硬件体系结构是层状结构。
- 访问操作系统必须使用系统调用(其实就是c语言函数,只不过是系统提供的)。
- 只要你判断出访问了硬件,那么必定贯穿整个软硬件体系结构。
其实这种软硬件结构是符合高内聚,低耦合的特点。
高内聚体现在硬件部分只能是硬件,软件只能是软件,每一个部分是“独立”的存在,而各个部分是由一个个接口联系的!比如:我们换一个键盘,鼠标,亦或者网卡,内存条,不管换成哪种牌子,都能用,而不是只能限制一种牌子或者不能换!
再比如我们初学c语言的时候,总是喜欢把所有代码都放在main函数里面,直到我们学了函数,就可以层层调用,层次分明,这也是高内聚的特点。
低耦合的特点体现再它们各自都是用接口联系的,这就是说我们可以随便换鼠标,键盘等外设!
进程
在课本上进程的概念是比较抽象的,导致很多人都会把一个正在执行的程序看成是一个进程,但其实这种是比较片面的!
我们先抛出来:
进程==内核数据结构对象+执行的代码和数据。
解释:
我们执行一个个可执行程序或者软件,它们都要先加载到内存里面(将磁盘数据拷贝到内存里面),OS势必要将这一个个程序管理起来,所以OS会去开一个个节点指向执行的代码和数据,用于管理。一个个节点是一个双链表(也叫进程列表)联系起来!所以说对正在执行的程序的管理转换成了对这个双链表的增删查改。
在此基础上cpu是怎么调度一个一个程序呢?
很简单,有了pcb,cpu只需要拿到一个一个管理程序的pcb即可进行调度,于是这一个个节点又会组成一个调度队列,cpu只需要通过这个调度队列即可转化成了调度队列的增删查改。
注意:双链表和调度队列不冲突,后面会做出解释!
我们将这种描述执行的代码和数据的数据结构对象统称为PCB,而在Linux中叫作task_struct。
它们之间的区别就相当于shell和bash的区别!task_struct只是PCB中的一种。
也就是说:进程==PCB+执行的代码和数据。
task_struct
- 标⽰符(pid):描述本进程的唯⼀标⽰符,⽤来区别其他进程。
- 状态(运行,睡眠,僵尸状态):任务状态,退出代码,退出信号等。
- 优先级:相对于其他进程的优先级。
- 程序计数器:程序中即将被执⾏的下⼀条指令的地址。
- 内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。
- I∕O状态信息:包括显⽰的I/O请求,分配给进程的I∕O设备和被进程使⽤的⽂件列表。
- 记账信息:可能包括处理器时间总和,使⽤的时钟数总和,时间限制,记账号等。
图理解:
基于上述的理解,所以我们历史上执行过的所有指令,工具,自己的程序,运行起来,就是个进程!
操作
我们运行一个简单的c语言文件(myprocess.c),来逐步理解进程!
我们利用getpid函数可以获取进程ID。
我们可以查看所有进程:ps axj
运行myprocess.c,查看:
我们在查myprocess的时候,grep也是一个进程,所以grep也查进来了!
我们也可以这样查:
我们也可以通过top指令来查看:
杀掉进程
我们之前知道ctrl+c可以强制退出,其实这就是在杀掉进程,当然我们也可以这样杀掉进程:
kill -9 进程编号
/proc文件夹
我们的进程也可以在/proc查到,/proc文件夹是在磁盘上,而进程是动态的,所以/proc文件夹也是动态的!我们杀掉某个进程,proc文件夹中会立马体现出来。这其实也印证了linux下一切皆文件的说法!
我们可以通过查看/proc文件夹来查看我们想要查看的进程!
这样我们OS就能通过cwd直到某个进程的工作目录,这也就是为什么当我们写fopen函数时,不需要写当前程序的绝对路径,只需要写目标文件名即可!
当我们在运行某个程序时,我们把可执行文件删掉,此时程序还能跑,这是因为我们删掉的是磁盘中的可执行文件,而运行这个程序时,磁盘中的可执行文件早就拷贝到了内存中,所以还能跑,只是proc/XXX文件中的exe文件会标红,提示我们磁盘中的可执行文件已经没有了!
我们上图看看:
其实,我们可以更改进程的cwd,利用chdir函数可更改。
chdir函数具有修改当前工作目录的功能,其实我们常用的cd命令,它的底层就是chdir函数,我们之前说过,我们平时不断敲指令,是命令解释器(bash)来处理我们的各种指令的,所以cd指令其实就是修改bash的路径。
父子进程
我们知道getpid函数可以获取进程自己的ID,但getppid函数可以获取当前进程的父进程!
我们的命令解释器(bash)其实也是一个进程,而我们自己主动去启动一个进程,那么这个进程其实就是bash的子进程。我们当然可以同时去启动多个进程(它们都是bash的子进程),所以不难知道:
父进程:子进程==1:n 是1比多的关系!而我们自己也能去创子进程,所以最终进程之间的关系会形成一个多叉树!
至此,我们以前写的所有指令,程序,都是bash的子进程!
我们不断重复的启动/杀某一个进程,它自己的pid会变,而父进程的pid不变。
我们知道可以多个用户登陆一个机器,而OS会给每个登陆用户一个bash,为什么?
因为每个用户都需要去不断敲指令,所以OS会给每个用户分配一个bash来处理每个用户不同的指令需求!
我们不妨说的更深一点,我们知道OS是c语言写的,当然命令解释器也是如此,我们不断的敲指令,是不断的输入,bash不断的解释指令的。
所以说如果有n个用户登陆,就能查到n个bash进程!
一个用户的bash进程的pid只要登陆了就一直不会变,除非退出重新登陆。
创建子进程
fork函数创建子进程,创建成功给子进程返回0,给父进程返回子进程的pid,创建失败返回-1.
看图:
解释:
当前程序先打印,再创建子进程,再打印。
当前的程序的父进程是bash,然后创建一个子进程,这个子进程的父进程是当前执行的程序!
第一次打印只是当前程序的打印,而后两次打印是当前程序和当前程序的子进程分别打印的!
那为什么是这样呢?
我们知道进程是由pcb+自己的代码和数据,所以说创建一个子进程也就是得有pcb和自己的代码和数据,所以会申请一个新的pcb,父进程会把自己的pcb拷贝给子进程pcb,既然pcb都是一样的,那么父进程的代码和数据都是和子进程共享的。(代码是只读,数据是写时拷贝,我们后面讲)。
我们继续看:
看到这里,就有一点看不懂了!
解释一下:
程序fork出来了一个进程,此时现在就有两个进程,因为fork函数是给子进程返回0,给父进程返回子进程的pid,所以子进程走id==0的if条件,而父进程走id>0的if条件。
至此我们有几个疑问:
为什么fork函数要给子进程返回0,父进程返回子进程的pid?
我们知道一个父进程可以有多个子进程,那么父进程怎么区分这么多子进程呢?所以要给父进程返回子进程的pid以便区分。
为什么fork函数能有两个返回值?怎么实现的?
进入fork函数,先申请一个新的pcb,拷贝父进程的pcb拷贝给子进程pcb,将子进程pcb放入进程列表,甚至放入调度队列中,此时子进程就已将被创建,然后父进程跑一次return语句,子进程也跑一遍!
既然父子进程在fork函数执行return语句时分流,而id变量始终是一个变量,怎么能存储两个值呢?
我们前面说过,父子进程的代码是只读共享的,数据是写时拷贝的共享,什么是写时拷贝呢?写时拷贝就是,父子进程任何一方需要给同一个变量修改时,OS会先将这个变量拷贝一份,然后供一方修改。
我们可以验证一下写时拷贝:
代码:
因为写时拷贝,所以子进程的gal会变,而父进程的gal始终是100.
结果:
图:
好了,我们下期见!
相关文章:
什么是进程?
目录 冯诺依曼体系 操作系统(OperatorSystem) 设计OS的目的 进程 task_struct 操作 /proc文件夹 父子进程 创建子进程 了解进程之前,我们先说说冯诺依曼体系结构,这是计算机硬件方面的知识。 冯诺依曼体系 我们常见的计算机,如笔记…...
mysql备份存储过程、函数和事件
背景 今天还原mysql数据库备份发现,数据库中没有存储过程和函数,虽然不推荐研发使用数据库的函数、存储过程,但还是免不了有人偶尔使用,所以整理备份和还原策略。 数据库备份 mysqldump -u user -p --routines --triggers --ev…...
【正点原子STM32MP257连载】第五章 ATK-DLMP257B文件系统简介 #文件系统 #SSH
1)实验平台:正点原子ATK-DLMP257B开发板 2)浏览产品:https://www.alientek.com/Product_Details/135.html 3)全套实验源码手册视频下载:正点原子资料下载中心 文章目录 第五章 ATK-DLMP257B文件系统简介5.1…...
实战5:Python使用循环神经网络生成诗歌
实战5:Python使用循环神经网络生成诗歌 使用依赖加载数据词典构建和文本预处理总代码 在我们学习了课程8后,我们在实战练习一个例子。 你的主要任务:学习如何使用简单的循环神经网络(Vanilla RNN)生成诗歌。亚历山大谢…...
【网络安全】谁入侵了我的调制解调器?(二)
文章目录 针对 TR-069 协议 REST API 的攻击思路攻击百万台调制解调器意外发现 Cox 后端 API 的授权绕过漏洞确认我们能够进入任何人的设备访问和更新任何Cox商业客户账户通过泄露的加密密钥覆盖任何人的设备设置执行对任何调制解调器的命令影响最后想说阅读本文前,请先行浏览…...
当纺织车间遇上“数字魔法”--天拓四方飞鸟物联平台+边缘计算采集网关的智造革命
在传统印象里,纺织车间总是机器轰鸣、纱线纷飞,工人穿梭其间手动调整参数,次品率全凭经验“拿捏”。但如今,某纺织龙头企业的智能工厂里,一台台纺织机像被施了“聪明咒”,自己会“说话”、会“思考”&#…...
基于PLC的停车场车位控制系统的设计
2.1 设计目标 本课题为基于PLC的停车场车位控制系统来设计,在此将功能确定如下: 针对8个车位的停车场进行设计将停车场分为入口处,车位处、以及出口处三个部分;每个车位都有指示灯指示当前位置是否空闲,方便司机查找空…...
ios接入穿山甲【Swift】
1.可接入的广告,点击右下角查看接入文档 https://www.csjplatform.com/union/media/union/download/groMore 2.进入接入文档,选择最新版本进行接入 pod Ads-CN-Beta,6.8.0.2pod GMGdtAdapter-Beta, 4.15.22.0pod GDTMobSDK,4.15.30pod KSAdSDK,3.3.74.0p…...
【iOS】OC高级编程 iOS多线程与内存管理阅读笔记——自动引用计数(二)
自动引用计数 前言ARC规则所有权修饰符**__strong修饰符**__weak修饰符__unsafe_unretained修饰符__autoreleasing修饰符 规则属性数组 前言 上一篇我们主要学习了一些引用计数方法的内部实现,现在我们学习ARC规则。 ARC规则 所有权修饰符 OC中,为了处…...
智能语音识别+1.2用SAPI实现文本转语音(100%教会)
欢迎来到智能语音识别系列的第二篇文章. 上一篇文章的地址在这:智能语音处理1.1下载需要的库(100%实现)-CSDN博客 想必上一篇的操作(文本转语音)已经成功实现了 接下来,我们要学习用SAPI技术去实现文本转语音 一.简单介绍SAPI技术 SAPI是架构在COM基础上的,微软…...
Unity导出微信小游戏后无法调起移动端输入框
参考官方demo 参考demo https://gitee.com/wechat-minigame/minigame-unity-webgl-transform/tree/main/Demo/API_V2 里面有对输入文本框适配的处理方法,还有一些其他功能展示 1 使用Unity打开/Demo/API目录,API示例开发版本为Unity 2022.3.14f1。 2 若…...
16.使用豆包将docker-compose的yaml转为k8s的yaml,安装各种无状态服务
文章目录 docker方式httpbinit-toolslinux-commandmyipreference docker-compose安装k8s方式 docker方式 httpbin A simple HTTP Request & Response Service https://httpbin.org/ https://github.com/postmanlabs/httpbin https://github.com/mccutchen/go-httpbin do…...
每日OJ_牛客_kotori和抽卡(二)_数学_C++_Java
目录 牛客_孩子们的游戏_约瑟夫环 题目解析 C代码 Java代码 牛客_孩子们的游戏_约瑟夫环 孩子们的游戏(圆圈中最后剩下的数)_牛客题霸_牛客网 描述: 每年六一儿童节,牛客都会准备一些小礼物和小游戏去看望孤儿院的孩子们。其中,有个游戏…...
整活 kotlin + springboot3 + sqlite 配置一个 SQLiteCache
要实现一个 SQLiteCache 也是很简单的只需要创建一个 cacheManager Bean 即可 // 如果配置文件中 spring.cache.sqlite.enable false 则不启用 Bean("cacheManager") ConditionalOnProperty(name ["spring.cache.sqlite.enable"], havingValue "t…...
JVM:运行时数据区和线程
一、运行时数据区概述 (1)整体架构 JVM 启动时,操作系统会为它分配相应的内存空间,接着 JVM 会对分配到的空间进行划分。当 JVM 退出,这些空间会被回收。JVM 将分配到的内存空间主要分成五部分:程序计数器…...
Lucene.NET + Jieba分词:核心词典与停用词配置详解
文章目录 前言一、dict.txt:核心分词词典1. 文件作用2. 文件格式3. 配置方法 二、cn_synonym.txt:同义词扩展库1. 文件作用2. 文件格式3. 在 Lucene 中使用 三、stopwords.txt:停用词表1. 文件作用2. 文件格式3. 配置方法 四、实战࿱…...
软件测试之测试数据生成(Excel版)
这是Excel生成测试数据的函数使用 1.时间 1.1.时间 例生成2022-05-01之前一年内任意时间点: =TEXT("2022-05-01"-RAND()-RANDBETWEEN(1,365),"yyyy-mm-dd hh:mm:ss")1.2.年月日 yyyy-mm-dd 以当前时间生成10年的日期 =TEXT(NOW()-RAND()-RANDBETWE…...
局域网内Docker镜像共享方法
在局域网内将Docker镜像构建并传输到另一台电脑,可以通过以下几种方法实现。以下是具体步骤及注意事项,结合不同场景的适用方案: 方法一:使用 docker save 和 docker load 传输镜像文件 步骤说明 在构建机上保存镜像 通过 docker…...
解决WinEdt编辑器出现文字不会适应软件宽度的问题
解决WinEdt编辑器出现文字不会适应软件宽度的问题 问题描述解决 问题描述 在使用WinEdt编辑Latex文本时,发现突然动了下键盘,或者突然就在编辑文本时不能自动换行,而是超出了软件屏幕的宽度。 解决 按住ctrl w ,直到界面变成下…...
跨境电商管理转型:日事清通过目标管理、流程自动化助力智优美科技项目管理升级与目标落地复盘
1.客户背景介绍 深圳市智优美科技有限公司是一家专业从事外贸B2C的电子商务公司,公司总部位于深圳市宝安区,旗下拥有三家子公司。目前销售的品类有:家居用品、电子产品、电子配件产品等,在深圳外贸电商行业销售额稳居行业前10名。…...
高防CDN、高防IP vs 高防服务器:核心优势与选型指南
一、高防服务器的核心局限 高防服务器是指通过机房部署硬件防火墙(如集群防火墙、流量清洗设备)来防御DDoS攻击的物理或虚拟服务器。其核心问题在于: 单点防御风险:依赖单一服务器硬扛攻击,若攻击流量超过防御阈值&am…...
入门-C编程基础部分:5、变量
飞书文档https://x509p6c8to.feishu.cn/wiki/PVnawQn5DiVhHhkMApqcDyDvnWg 变量的作用? 存储程序运行时,需要存储一些可能会变化的数据。 C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局。 变量的名称可以由字母、数字和下划…...
Kafka深度解析与实战应用
Kafka深度解析与实战应用 作者:LedgerX技术团队 发布日期:2025年4月16日 引言 在当今数字时代,数据已成为企业的核心资产,而高效处理大规模数据流的能力则成为现代后端系统的关键挑战之一。Apache Kafka作为一个分布式流处理平台…...
数学教学通讯杂志数学教学通讯杂志社数学教学通讯编辑部2025年第6期目录
课程教材教法 “课程思政”视域下的高中数学教学探索与实践——以“函数概念的发展历程”为例 赵文博; 3-617 PBL教学模式下高中统计教学的探索与实践——以“随机抽样(第一课时)”为例 陈沛余; 7-10 “三新”背景下的高中数学教学困境与应对…...
【JavaEE初阶】多线程重点知识以及常考的面试题-多线程进阶(二)
本篇博客给大家带来的是多线程中synchronize的实现原理和JUC(java.util.concurrent) 常见类的相关知识点. 🐎文章专栏: JavaEE初阶 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的…...
Flutter PIP 插件 ---- iOS Video Call 自定义PIP WINDOW渲染内容
以下是一篇关于在 iOS 中实现画中画(PiP)功能的技术博客: iOS 画中画(PiP)功能实现指南 效果 简介 画中画(Picture in Picture, PiP)是一项允许用户在使用其他应用时继续观看视频内容的功能。本文将详细介绍如何在 iOS 应用中实现 PiP 功能,包括自定义内容渲染和…...
【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——4G模块ME3630测试
1)实验平台:正点原子ATK-DLMP257B开发板 2)浏览产品:https://www.alientek.com/Product_Details/135.html 3)全套实验源码手册视频下载:正点原子资料下载中心 文章目录 第四章 ATK-DLMP257B功能测试——4G模…...
高并发内存池(四):内存释放原理与实现
前言:经过前3期的攻坚,我们已完整实现了内存动态申请的核心模块。接下来将进入关键阶段——内存释放机制的理解与实现,这是构建完整 高并发内存池 的最后一块技术拼图。该模块完成后,项目主体架构将基本成型(达90%&…...
【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——EEPROM、SPI FLASH测试 #AT24C64 #W25Q128
1)实验平台:正点原子ATK-DLMP257B开发板 2)浏览产品:https://www.alientek.com/Product_Details/135.html 3)全套实验源码手册视频下载:正点原子资料下载中心 文章目录 第四章 ATK-DLMP257B功能测试——EEP…...
《突破控件限制:用Qt绘图API解锁高级界面定制能力》
一、基本概念 虽然 Qt 已经内置了很多的控件,但是不能保证现有控件就可以应对所有场景。很多时候我们需要更强的 “自定制” 能力。 Qt 提供了画图相关的 API,允许我们在窗口上绘制任意的图形形状来完成更复杂的界面设计 所谓的 “控件” 本质上也是通…...
MyBatis-Plus 中BaseMapper接口是如何加速微服务内部开发的?
假设我们有一个简单的微服务项目,需要对 User 实体进行基本的数据库操作。 场景一:使用原生 MyBatis 的开发流程 (作为对比) 定义实体类 (Entity): // package com.yourcompany.usermicroservice.entity; public class User {private Long id;private S…...
AIGC-十款数据分析类智能体完整指令直接用(DeepSeek,豆包,千问,Kimi,GPT)
Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列AIGC(GPT、DeepSeek、豆包、千问、Kimi)👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资…...
鸿蒙应用(医院陪诊系统)开发篇1·主页面的tabs布局
引言: 首先可在鸿蒙开发者官网找到DevEco Studio的安装教程。 安装好了之后,我们开始开发。 知识点: tabs布局,鸿蒙官方文档地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-contai…...
【大模型】DeepSeek + Coze 打造个人专属AI智能体使用详解
目录 一、前言 二、AI智能体介绍 2.1 什么是AI智能体 2.2 AI智能体核心能力 2.3 AI智能应用场景 三、coze 介绍 3.1 coze是什么 3.1.1 平台概述 3.1.2 平台适用人群 3.2 平台核心功能 3.3 coze可以做什么 3.4 为什么选择coze 四、coze 搭建AI智能体操作实践 4.1 搭…...
7.(vue3.x+vite)弹性布局(flex布局)
1:效果截图 2:代码实现 <template><span style="font-size: 20px">右边固定,左边自适应</span><div class=<...
Python基础总结(五)之字典
文章目录 一、字典的格式二、字典的操作2.1 增加项2.1.1 直接增加项2.1.1 formkeys方法 2.2 删除项2.2.1 clear()方法2.2.2 pop()方法 2.3 修改项2.3.1 直接修改2.3.2 update()方法 2.4 查找项2.4.1 get()方法2.4.2 直接查询2.4.3 items()方法2.4.4 keys()方法2.4.5 values()方…...
MCP简介:重构人机交互底层逻辑
在人工智能技术飞速发展的今天,大语言模型(LLM)的应用场景正不断拓展,但模型与外部系统之间的连接方式却成为制约其潜力发挥的关键瓶颈。为了解决这一难题,由AI领域顶尖公司Anthropic(Claude模型背后的开发…...
LangChain缓存嵌入技术完全指南:CacheBackedEmbedding原理与实践(附代码示例)
一、嵌入缓存技术背景与应用场景 1.1 为什么需要嵌入缓存? 算力消耗问题:现代嵌入模型(如text-embedding-3-small)单次推理需要约0.5-1秒/文本 资源浪费现状:实际业务中约30%-60%的文本存在重复计算 成本压力&#…...
国产DPU芯片+防火墙,能否引领网络安全新跨越?
近日,国内首款搭载国产DPU芯片的800Gbps下一代防火墙——中科网威NSFW - 12000正式发布,引发行业广泛关注。 国产DPU芯片与防火墙的结合,正在推动网络安全领域实现技术突破与体系升级。以下从技术特性、应用场景和产业价值三个维度分析其引领…...
Spark-SQL与Hive的连接及数据处理全解析
Spark-SQL与Hive的连接及数据处理全解析 在大数据处理领域,Spark-SQL和Hive都是重要的工具。今天就来聊聊Spark-SQL如何连接Hive以及相关的数据处理操作。 Spark-SQL连接Hive有多种方式。内嵌Hive虽然使用简单,直接就能用,但在实际生产中…...
ArcGIS Desktop使用入门(四)——9版本与10版本区别
系列文章目录 ArcGIS Desktop使用入门(一)软件初认识 ArcGIS Desktop使用入门(二)常用工具条——标准工具 ArcGIS Desktop使用入门(二)常用工具条——编辑器 ArcGIS Desktop使用入门(二&#x…...
使用 chromedriver 实现网络爬虫【手抄】
1、引用 selenium 包 <dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>4.29.0</version> </dependency> <dependency><groupId>org.seleniumhq.seleniu…...
ERROR: Unknown host CPU architecture: arm64
1、先检查NDK版本是否支持arm64,NDK版本21.3以上 2、检查gradle中,有关NDK版本是否设置arm64-v8a 例如: ndkVersion "21.4.7075529"ndk {abiFilters "armeabi-v7a","arm64-v8a"} local.properties中&#x…...
从 SQL2API 到 Text2API:开启数据应用开发的新征程
在技术革新浪潮的席卷下,数据应用开发领域正经历着深刻变革。曾经,构建数据 API 需要开发者具备扎实的数据库知识和编程技能,手动编写复杂的 SQL 查询与 API 代码,这一过程不仅耗时费力,还将众多非技术人员阻挡在数据应…...
OpenCv高阶(四)——角点检测
一、角点检测 在计算机视觉中,角点检测是识别图像中局部区域(角点)的关键技术,这些区域通常是两条或多条边缘的交点,具有丰富的结构信息,常用于图像匹配、跟踪、三维重建等任务。 Harris角点检测算法是一…...
centos8 部署 openstack
在 CentOS 8 上部署 OpenStack 是一个复杂的过程,涉及多个组件的安装和配置。OpenStack 是一个开源的云计算平台,它提供了基础设施即服务(IaaS)的功能。下面我将指导你通过基本的步骤来部署 OpenStack。 前提条件 系统要求&#…...
智能云图库-8-AI编辑
一、基础图片编辑 需求分析 在日常的图片管理中,用户经常需要对图片进行简单处理,比如裁剪多余部分、旋转图片、放大缩小尺寸等。 因此,我们首先要引入基础图片编辑功能,帮助用户快速完成以下操作: 裁剪&#…...
libwebsocket建立服务器需要编写LWS_CALLBACK_ADD_HEADERS事件处理
最近在使用libwebsocket,感觉它搭建Http与websocket服务器比较简单,不像poco库那么庞大,但当我使用它建立websocket服务器后,发现websocket客户端连接一直没有连接成功,不知道什么原因,经过一天的调试&…...
L1-002 打印沙漏
L1-002 打印沙漏 - 团体程序设计天梯赛-练习集 (pintia.cn) 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ************ *****所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐&#…...
JSP技术入门指南【一】利用IDEA从零开始搭建你的第一个JSP系统
Jsp技术入门指南【一】利用IDEA从零开始搭建你的第一个JSP系统 前言一、什么是JSP1.1 JSP是干什么的?1.2 JSP与Servlet的关系是什么? 二、在Idea中创建第一个JSP系统三、JSP和HTML的差别3.1 格式区别3.2 注释区别 前言 在前面的内容中,我们已…...