最新资讯

  • Linux:线程的概念

Linux:线程的概念

2025-04-28 14:00:53 1 阅读

线程:进程内的一个执行分支,他的执行粒度比进程要细

一、通过进程引入线程

         以前我们想要一个执行流,我们需要fork一个子进程,然后子进程需要拷贝 take_struct结构体+进程地址空间+页表+文件描述符表…… 

     而当我们只创建一个task_struct,但是我们不开辟其他新的资源,那么这就是线程!

        任何执行流执行,都需要有资源, 而进程地址空间是资源的窗口,所以你要么拷贝一份地址空间(进程),要么和别人一起用一份地址空间(线程)

问题:有了线程的概念后,如何理解我们以前的进程??

——>有了线程之后,我们会发现一个进程里可能会存在多个线程(线程是进程内部的执行流资源)!!也就是可以有多个执行流!!因此我们以前学习的是一个进程只有一个执行流,他其实是一种特殊的情况!不要认为一个进程能够被调度,那他就是进程的所有!

二、OS是如何管理线程的

      一个进程里可能有多个线程,那么就会有问题就是:我的线程是属于哪个进程的?哪部分地址空间是属于我的?cpu调度这个进程的时候我应该去调度哪个线程?当前线程的状态是什么?当前线程的时间片是什么??……  

——>基于以上诸多属性,必然要求我的OS要把他们管理起来!!

——>所以有些OS内部就会设计TCB结构体,然后再创建新的关于线程的创建、终止、等待、控制、释放等概念建立一些新的逻辑和接口 ,还得把进程和线程该关联起来……这样设计的话其实维护难度很大的,并且你会发现很多代码会和进程部分的一样,所以对于程序员来说维护两份十分相似的代码其实他的维护成本是很大的!!且容易出错效率低下!!

——>而Linux的设计者认为,虽然我们尊重OS系统的学科,对于一个新出来的概念按道理是应该进行先描述再组织,但是这并不代表我们一定要用新的方法来描述和组织,因为我们发现PCB结构体的诸多属性和概念都很符合TCB的要求。 那我为什么要单独搞一个TCB呢??你最多就是执行力度细一点(线程执行的是进程代码的一部分),代码少一点,可你不也是一个执行流么??

——>因此我们Linux的设计者采用描述“进程”的PCB结构体来模拟描述“线程”,大不了在内部单独设置一些属性来区分就行了,其他很多概念接口都可以复用,大大降低了设计和维护成本

 ——>无论是Linux方法还是windows的方法,无论选择哪一种,他都必须得尊重OS学科的要求,但Linux的这个设计方案是特别卓越的!! 

——>Linux中,虽然在我们的视角里有进程和线程的区别,但是在OS和CPU的眼里,我只有调度执行流的概念!我不管你是进程还是线程,我只会见到一个个的PCB结构体,一个PCB结构体对应着一个执行流(比如说我们的大O1调度算法,我们知道排队的是PCB结构体,但是他是属于进程还是属于线程,cpu压根不关心)

 ——>因此Linux基于这种设计方案,我们把内核的线程进行高度抽象,叫做轻量级进程,他是建立在内核之上并由内核支持的用户线程

问题1:理解cpu视角的  线程<=执行流

——>对于我们的cpu来说,如果当前的平台是Linux,那么线程==执行流(因为被统一看做轻量级进程),而如果当前的平台是windows,那么线程<执行流(winows中有单独的tcb结构体,因此我们的执行流可能是PCB也可能是TCB)

问题2: 理解执行流>=进程 

——>如果每个进程只有一个执行流,那么就是==,而一但在进程中引入多线程,那么一个进程里面就会存在多个执行流,此时就是> 

问题3:如果理解有些教材上说“Linux没有真正意义上的线程,而是用“进程”模拟的线程”?

——> 这两句话不完全对,(1)前半句:不能说我Linux没有单独对TCB做描述,你就说我没有真正意义上的线程!!我Linux也是遵守了OS学科的线程概念的,只不过实现方法不同,如果非得杠的话,应该只能说没有真正意义删搞得TCB结构体!! (2)后半句:应该说是用进程的内核数据结构PCB模拟的线程

——>因此这两句话想表达的核心意思是    Linux相比于其他OS在内核数据结构上设计的差异!而不是对线程概念的差异! 

 问题4:为什么都是操作系统,但是Linux和windows存在这么大的差异??不同的平台会带来什么影响??

——>操作系统这门学科本质上是规定了操作系统应该是什么样的以及在设计上需要具备哪些概念,其实可以理解为他是一本设计操作系统的指导手册,只要我们遵守了,那么他的设计方案可以是多种多样的!!(就是设计理论和实现方案的区别,前者指导后者,缺一不可!也是理论和实际相结合)

 ——>OS是计算机世界的哲学,就跟马原一样,虽然不能帮助你赚钱,但是可以知道你多很多事情,教会你看清问题的本质,能够帮助你更好地做出改变!

三、重新定义线程和进程

   引入一个生活的问题:承担分配社会资源的基本实体是什么??

 ——>应该是家庭,因为我们是以家庭为单位生活的,我们基于一些社会资源和亲情关系形成一个集体。

——>但是其实我们每个人都在这个家庭中会有自己的任务,比如说你会去上学,你的父母会去工作,你的爷爷奶奶会去跳广场舞……

——>但是不管我们领的是什么任务,我们都有一个共同的任务:过好日子!!

——>但是你为什么能够去做这些任务呢?你之所以能够上学,你的爷爷奶奶之所以能够去跳广场舞……这些和家庭所拥有的社会资源是有关系的(资源是进行任务的进本保证

——>所以想毁掉一个家庭,那就剥夺所有资源就行了 

——>那为什么要去做这么任务呢??也是为了创建更多的资源。

——>所以我们的家庭就相当于是进程,而家庭成员就相当于是线程,每个小任务就是不同的执行流,共同任务就是我们最终想达到的目的,而所有线程共用进程地址空间的资源,如果想创建资源就是像OS申请,想释放资源就是OS回收……

 基于以上的引入,我们得到两个结论:

1、线程是OS调度的基本单位

2、进程是承担分配资源的基本实体(而线程就是进程内部的执行流资源!)

四、页表虚拟地址和物理地址的转化原理

   我们之前所理解的页表,只知道其中有虚拟地址、物理地址、当前是否加载到内存中的标记位、权限位……  但是页表真的如下图所示吗??

     假设是32位 那么地址的可能性就是2^32个 而虚拟地址+物理地址  一共8个字节(先不管其他的)那么就是2^35字节 (大约是35GB!) 那这不就扯淡了吗,内存才多大呢???所以具体的实现方案肯定不是这样的!!

问题1:所以OS底层究竟是如何做虚拟地址到物理地址的转换呢??

 ——>以32位为例,其实是  10(页目录)+10(二级页表)+12(页框偏移量) 

(1)CPU取得虚拟地址保存在CR3寄存器中

(2)MMU在CR3寄存器查到页目录的地址

(3)MMU根据虚拟地址的前10位,标识页目录中的偏移量,该偏移量对应的地址保存的是二级页表的地址

(4)MMU得到二级页表的地址,根据中间10位标识页表偏移量,在得到页框的起始地址(定位4kb的内存块)以及一些特殊数据(比如权限位)

(5)MMU最后在加上虚拟地址的后12位(表示页框偏移量),得到具体的物理地址并告知CPU!

 问题2:这样设计的优势在哪里呢??

——>先对比极端情况

虚拟地址的前10位(转成10进制就是数组下标) ,一共有2^10次方组合,然后每个都保存着二级页表的地址(4字节),所以一共需要 2^12字节  

而找到二级页表的地址之后,我们通过虚拟地址的中间10位(转成10进制就是数组下标),也是2^10的组合,而每一个位置都要存储页框的地址,但是由于页框固定是4KB大小的,所以只需要保持20个bit就行  然后再算上可能有一些位置保存权限位或者其他之类的 姑且也算4个字节,所以一共需要2^12字节 

接下来找到页框后就好办了 直接加上虚拟地址的后12位就是偏移量了!! 因此我们会发现一共需要2^24字节左右(大概16MB)  比之前2^35字节少了特别多!!

——>并且其实大多数情况下,我们的页目录必须是一开始就创建好的!(2^12字节必须有)!但是二级页表大部分情况下是不全的,而且我们可以通过查看二级页表对应的位置是否是空的,就可以判断数据是否已经被加载到内存中了!!

问题3:如果出现越界等页错误的情况导致虚拟地址转化失败了,cpu是怎么处理的?

——> 一旦发生转化失败,那么cr2寄存器会将转化失败的虚拟地址保存起来,方便告知上层

 问题5:为什么4个字节明明有4个地址,但是我们取地址的时候只拿到了一个地址呢??

 c、cpp中的变量无论多大,都只需要有起始地址,因为空间是连续的,所以我们通过起始地址+类型大小就可以确定这个变量的范围!

问题6: 你cpu是怎么知道类型的呢??

——>CPU并没有类型的概念!!因为编译器在编译的时候已经根据不同的类型生成不同的机器码了!所以cpu读取汇编指令的时候本身就知道要读几个字节,所以我们只需要通过软件定位到了起始地址,后面具体读多少偏移量CPU是能通过汇编知道的!

 问题7:编译器在编译的时候肯定只知道内置类型的机器码啊,那我们的自定义类型编译器是怎么知道的??

——>在编译器的眼中,无论你这个类有多大,我都会把你单纯地看成很多内置类型的集合!!而cpu在被设计的时候读取压实按照1/2/4/8的大小去读的,他只会一点一点地去读!因为你用的时候也是一点点去用的,不会一下子就把整个类给丢进去!在他眼里没有类型的概念

问题8:那么我们是如何给线程分配资源的呢???

——> 我们定义的每个函数在进程空间上的地址都是独立的,所以假设我们将某个函数专门交给一个函数去运行,那么他就天然地将地址空给给他做了划分!! 

五、线程VS进程

线程比进程更加轻量化,为什么?? 

1、创建和释放更加轻量化(整个生命周期的生死)

这个应该很好理解,特别是我们通过页表从虚拟地址到物理地址的转化也可以发现,创建一个进程是一个很“重”的事情 

2、切换更加轻量化(运行)

        切换线程的话,因为一个进程内资源共享,所以页表和进程地址空间不需要切换! 而切换进程则需要切换新的页表和地址空间!!   

问题1:可是,这不就是寄存器做了点小工作么??凭什么可以说切换会快很多呢??

——>因为CPU重存储着一个硬件级别缓存cache

      cpu觉得和内存交互数据还是太慢了,所以虽然他只能按照很小的字节数去读取,但是他在访问的时候一般会直接把一整个大块数据都放到cache(缓存的热数据)里,这样根据局部性原理一般来说一般接下去要访问的内容都是跟当前内容相邻的,所以这样的话就有一部分资源是在cpu内部读取的,读取会变快!   

     并且一般来说,我们的cache全称叫做LRU cache,他的设计就是会将最近最少使用的数据替换掉!!所以越往后读取我们的速度会越来越快,因为缓存的命中率在变高(随着时间的推移里面放的都是高频的被访问的内容)

    所以切换线程的时候,虽然上下文发生了变化,但是缓存却不会有很大的变化,而如果是切换进程,则会让整个缓存的热数据都需要被丢弃,然后新的进程由冷变热还会消耗很多时间!(因为缓存空间很大!!)

问题2:我cpu眼里都是轻量级进程,我怎么知道我切换的是进程还是线程呢??

——>PCB结构体里是有身份标识的,我们把刚创建的父进程一般叫做主线程,然后其他次线程虽然都跟主线程一样的pid  但是他们也都有自己的独立身份标识tid,所以我们可以通过标识 来判断当前做的是进程切换还是线程切换

 3、时间片需要重新分配

       如果一个进程想要创建多线程,他的时间片必须要重新被所有线程给分配,这样才能保证不会因为线程的增到导致进程的时间片变长,这样会影响到其他的进程。

六、线程的优缺点

 优点:

1、创建一个新线程的代价要比创建一个新进程小得多

2、与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多

3、线程占用的资源要比进程少很多

4、能充分利用多处理器的可并行数量

5、在等待慢速I/O操作结束的同时,程序可执行其他的计算任务

6、计算密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现(一般来说几个cpu就几个进程,这样就省去了切换时间)

7、I/O密集型应用,为了提高性能,将I/O操作重叠。(线程比cpu多一点 因为io是可以重叠的)

8、线程可以同时等待不同的I/O操作

缺点 

1、性能损失

一个很少被外部事件阻塞的计算密集型线程往往无法与共它线程共享同一个处理器。如果计算密集型 线程的数量比可用的处理器多,那么可能会有较大的性能损失,这里的性能损失指的是增加了额外的 同步和调度开销,而可用的资源不变。

2、健壮性降低

编写多线程需要更全面更深入的考虑,在一个多线程程序里,因时间分配上的细微偏差或者因共享了 不该共享的变量而造成不良影响的可能性是很大的,换句话说线程之间是缺乏保护的。

3、缺乏访问控制 进程是访问控制的基本粒度,在一个线程中调用某些OS函数会对整个进程造成影响。

4、编程难度提高 编写与调试一个多线程程序比单线程程序困难得多  

七、线程的异常 

单个线程如果出现除零,野指针问题导致线程崩溃,进程也会随着崩溃

线程是进程的执行分支,线程出异常,就类似进程出异常,进而触发信号机制,终止进程,进程终止,该 进程内的所有线程也就随即退出

八、线程的用途

合理的使用多线程,能提高CPU密集型程序的执行效率

合理的使用多线程,能提高IO密集型程序的用户体验(如生活中我们一边写代码一边下载开发工具,就是 多线程运行的一种表现)

 

本文地址:https://www.vps345.com/4700.html

搜索文章

Tags

PV计算 带宽计算 流量带宽 服务器带宽 上行带宽 上行速率 什么是上行带宽? CC攻击 攻击怎么办 流量攻击 DDOS攻击 服务器被攻击怎么办 源IP 服务器 linux 运维 游戏 云计算 javascript 前端 chrome edge python MCP 进程 操作系统 进程控制 Ubuntu 阿里云 网络 网络安全 网络协议 llama 算法 opencv 自然语言处理 神经网络 语言模型 ubuntu ssh 数据库 centos oracle 关系型 安全 分布式 deepseek Ollama 模型联网 API CherryStudio RTSP xop RTP RTSPServer 推流 视频 harmonyos 华为 开发语言 typescript 计算机网络 numpy rust http java flutter macos adb android 鸿蒙 php Dell R750XS ssl fastapi mcp mcp-proxy mcp-inspector fastapi-mcp agent sse 面试 性能优化 jdk intellij-idea 架构 深度学习 YOLO 目标检测 计算机视觉 人工智能 filezilla 无法连接服务器 连接被服务器拒绝 vsftpd 331/530 HCIE 数通 计算机外设 电脑 mac 软件需求 学习 docker 容器 DeepSeek-R1 API接口 live555 rtsp rtp 微信 微信分享 Image wxopensdk WSL win11 无法解析服务器的名称或地址 Hyper-V WinRM TrustedHosts websocket web安全 Kali Linux 黑客 渗透测试 信息收集 DigitalOcean GPU服务器购买 GPU服务器哪里有 GPU服务器 apache golang .netcore jenkins gitee spring boot 嵌入式硬件 vue3 HTML audio 控件组件 vue3 audio音乐播放器 Audio标签自定义样式默认 vue3播放音频文件音效音乐 自定义audio播放器样式 播放暂停调整声音大小下载文件 github AI Agent GaN HEMT 氮化镓 单粒子烧毁 辐射损伤 辐照效应 c# 创意 社区 cpu 内存 实时 使用 前端框架 Flask FastAPI Waitress Gunicorn uWSGI Uvicorn vscode react.js 前端面试题 node.js 持续部署 YOLOv8 NPU Atlas800 A300I pro asi_bench jmeter 软件测试 笔记 C 环境变量 进程地址空间 c语言 qt stm32项目 单片机 stm32 pytorch transformer sqlserver 科技 ai 个人开发 ide AI编程 物联网 iot cuda cudnn anaconda udp unity 僵尸进程 windows 微服务 springcloud 产品经理 agi microsoft vim 后端 c++ asm oceanbase rc.local 开机自启 systemd 麒麟 ollama llm chatgpt 大模型 llama3 Chatglm 开源大模型 Windsurf ping++ 运维开发 conda 机器学习 深度优先 图论 并集查找 换根法 树上倍增 宝塔面板访问不了 宝塔面板网站访问不了 宝塔面板怎么配置网站能访问 宝塔面板配置ip访问 宝塔面板配置域名访问教程 宝塔面板配置教程 tcp/ip word图片自动上传 word一键转存 复制word图片 复制word图文 复制word公式 粘贴word图文 粘贴word公式 YOLOv12 vue.js pycharm audio vue音乐播放器 vue播放音频文件 Audio音频播放器自定义样式 播放暂停进度条音量调节快进快退 自定义audio覆盖默认样式 银河麒麟服务器操作系统 系统激活 uni-app 负载均衡 ESP32 tomcat LDAP 实时音视频 maven intellij idea Qwen2.5-coder 离线部署 nginx 监控 自动化运维 ollama下载加速 智能路由器 外网访问 内网穿透 端口映射 WSL2 json html5 firefox pip .net ffmpeg 音视频 django flask web3.py 温湿度数据上传到服务器 Arduino HTTP 恒源云 经验分享 kubernetes 学习方法 程序人生 vSphere vCenter 软件定义数据中心 sddc RTMP 应用层 jupyter selenium 自动化 测试工具 服务器管理 宝塔面板 配置教程 服务器安装 网站管理 gitlab opensearch helm ansible playbook 剧本 雨云 NPS okhttp wireshark 显示过滤器 安装 ICMP Wireshark安装 WebRTC gpt 图形化界面 pygame wsl2 wsl MQTT 消息队列 博客 1024程序员节 adobe 传统数据库升级 银行 大语言模型 LLMs Dify 安装教程 GPU环境配置 Ubuntu22 CUDA PyTorch Anaconda安装 Python 网络编程 聊天服务器 套接字 TCP 客户端 Socket webrtc https GCC crosstool-ng opcua opcda KEPServer安装 AIGC oneapi open webui java-ee 微信开放平台 微信公众平台 微信公众号配置 mongodb pdf VSCode 多线程服务器 Linux网络编程 移动云 android studio AI大模型 LLM mysql visual studio code 编辑器 多层架构 解耦 springsecurity6 oauth2 授权服务器 token sas FTP 服务器 服务器部署ai模型 Linux awk awk函数 awk结构 awk内置变量 awk参数 awk脚本 awk详解 开源 部署 SSL 域名 spring DeepSeek 分析解读 云原生 elasticsearch 服务器数据恢复 数据恢复 存储数据恢复 raid5数据恢复 磁盘阵列数据恢复 visualstudio prometheus virtualenv mcu 驱动开发 硬件工程 嵌入式实习 爬虫 数据集 CPU 主板 电源 网卡 RAID RAID技术 磁盘 存储 缓存 HarmonyOS Next dify Trae IDE AI 原生集成开发环境 Trae AI 3d EasyConnect micropython esp32 mqtt Cline MacMini Mac 迷你主机 mini Apple zabbix 系统架构 Linux ecmascript nextjs react reactjs 流式接口 excel 程序员 postgresql pyqt 虚拟化 半虚拟化 硬件虚拟化 Hypervisor 小程序 微信小程序域名配置 微信小程序服务器域名 微信小程序合法域名 小程序配置业务域名 微信小程序需要域名吗 微信小程序添加域名 Kylin-Server 国产操作系统 大数据 政务 分布式系统 监控运维 Prometheus Grafana Deepseek ux 多线程 matlab open Euler dde deepin 统信UOS tcpdump hadoop 网工 压测 ECS pgpool 搜索引擎 ssrf 失效的访问控制 openwrt VR手套 数据手套 动捕手套 动捕数据手套 etcd 数据安全 RBAC 企业微信 Linux24.04 xrdp 远程桌面 远程连接 string模拟实现 深拷贝 浅拷贝 经典的string类问题 三个swap 游戏服务器 TrinityCore 魔兽世界 gpu算力 Ubuntu 24.04.1 轻量级服务器 NFS redhat av1 电视盒子 机顶盒ROM 魔百盒刷机 W5500 OLED u8g2 TCP服务器 Java 数学建模 雨云服务器 能力提升 面试宝典 技术 IT信息化 环境迁移 崖山数据库 YashanDB 命名管道 客户端与服务端通信 express 源码剖析 rtsp实现步骤 流媒体开发 直播推流 技能大赛 毕设 jar 远程 命令 执行 sshpass 操作 相差8小时 UTC 时间 docker搭建nacos详解 docker部署nacos docker安装nacos 腾讯云搭建nacos centos7搭建nacos protobuf 序列化和反序列化 redis netty springboot远程调试 java项目远程debug docker远程debug java项目远程调试 springboot远程 rpc 远程过程调用 Windows环境 webstorm C语言 强制清理 强制删除 mac废纸篓 低代码 svn ArcTS 登录 ArcUI GridItem 鸿蒙系统 arkUI eNSP 网络规划 VLAN 企业网络 华为od OD机试真题 华为OD机试真题 服务器能耗统计 linux环境变量 kvm 无桌面 命令行 git gitea chrome devtools chromedriver 媒体 risc-v k8s资源监控 annotations自动化 自动化监控 监控service 监控jvm Cursor bootstrap html web Ark-TS语言 ci/cd 多进程 计算机 css 北亚数据恢复 oracle数据恢复 虚拟机 VMware KVM bonding 链路聚合 压力测试 XCC Lenovo spring cloud mount挂载磁盘 wrong fs type LVM挂载磁盘 Centos7.9 firewalld ecm bpm 繁忙 服务器繁忙 解决办法 替代网站 汇总推荐 AI推理 Docker Compose docker compose docker-compose dba 宕机切换 服务器宕机 ddos list 数据结构 微信小程序 小游戏 五子棋 远程工作 skynet 课程设计 VMware安装mocOS macOS系统安装 TRAE Playwright 自动化测试 Minecraft gcc ue4 着色器 ue5 虚幻 目标跟踪 OpenVINO 推理应用 iDRAC R720xd nvidia bash freebsd 开机自启动 信息与通信 debian PVE zotero WebDAV 同步失败 代理模式 软件工程 IIS .net core Hosting Bundle .NET Framework vs2022 XFS xfs文件系统损坏 I_O error VMware安装Ubuntu Ubuntu安装k8s k8s es jvm mysql离线安装 ubuntu22.04 mysql8.0 AI代码编辑器 shell 磁盘监控 服务器配置 华为云 混合开发 环境安装 JDK 系统开发 binder 车载系统 framework 源码环境 Samba NAS QQ 机器人 bot Docker dell服务器 go 硬件架构 Reactor 设计模式 C++ 基础入门 编程 交互 嵌入式 linux驱动开发 arm开发 rocketmq X11 Xming 集成学习 集成测试 Linux PID centos-root /dev/mapper yum clean all df -h / du -sh 生物信息学 openEuler Google pay Apple pay 服务器主板 AI芯片 指令 minio 进程信号 代码调试 ipdb CLion 腾讯云 腾讯云大模型知识引擎 图像处理 curl wget 交换机 硬件 设备 GPU PCI-Express jetty undertow UOS 统信操作系统 yum MQTT协议 消息服务器 代码 报错 Ubuntu Server Ubuntu 22.04.5 linux 命令 sed 命令 Erlang OTP gen_server 热代码交换 事务语义 RoboVLM 通用机器人策略 VLA设计哲学 vlm fot robot 视觉语言动作模型 具身智能 ip sqlite3 devops springboot 飞牛NAS 飞牛OS MacBook Pro 音乐服务器 Navidrome 音流 设置代理 实用教程 kylin 智能手机 Termux SSH JAVA DeepSeek行业应用 Heroku 网站部署 串口服务器 hugo ruoyi C# MQTTS 双向认证 emqx minicom 串口调试工具 测试用例 功能测试 AI写作 AI作画 IIS服务器 IIS性能 日志监控 next.js 部署next.js 聊天室 gradle nuxt3 Redis Desktop iftop 网络流量监控 make命令 makefile文件 向日葵 其他 r语言 数据挖掘 数据可视化 数据分析 mq rabbitmq kafka 数据库架构 数据管理 数据治理 数据编织 数据虚拟化 sql KingBase idm docker命令大全 chfs ubuntu 16.04 漏洞 safari 系统 安全威胁分析 vscode 1.86 grafana IPMI unix 文件系统 路径解析 Docker Hub docker pull 镜像源 daemon.json Ubuntu 24 常用命令 Ubuntu 24 Ubuntu vi 异常处理 豆瓣 追剧助手 迅雷 nas 弹性计算 云服务器 裸金属服务器 弹性裸金属服务器 unity3d 银河麒麟 kylin v10 麒麟 v10 网络穿透 Nuxt.js Xterminal RAGFLOW RAG 检索增强生成 文档解析 大模型垂直应用 ESXi postman mock mock server 模拟服务器 mock服务器 Postman内置变量 Postman随机数据 CORS 跨域 大模型面经 职场和发展 大模型学习 ip命令 新增网卡 新增IP 启动网卡 状态管理的 UDP 服务器 Arduino RTOS WebUI DeepSeek V3 边缘计算 智能硬件 mariadb 医疗APP开发 app开发 大模型微调 DevEco Studio efficientVIT YOLOv8替换主干网络 TOLOv8 mybatis sqlite dubbo MS Materials openssl 密码学 gateway Clion Nova ResharperC++引擎 Centos7 远程开发 模拟退火算法 threejs 3D code-server mosquitto echarts 信息可视化 网页设计 数据库系统 pillow hibernate kamailio sip VoIP 大数据平台 统信 虚拟机安装 框架搭建 k8s集群资源管理 云原生开发 Dell HPE 联想 浪潮 remote-ssh SSH 服务 SSH Server OpenSSH Server rust腐蚀 eureka RustDesk自建服务器 rustdesk服务器 docker rustdesk fpga开发 selete 高级IO asp.net大文件上传 asp.net大文件上传源码 ASP.NET断点续传 asp.net上传文件夹 asp.net上传大文件 .net core断点续传 .net mvc断点续传 ros2 moveit 机器人运动 蓝耘科技 元生代平台工作流 ComfyUI tcp vscode1.86 1.86版本 ssh远程连接 telnet 远程登录 矩阵 edge浏览器 big data 飞书 孤岛惊魂4 uniapp vue web3 群晖 飞牛 sysctl.conf vm.nr_hugepages tensorflow VS Code trae 单一职责原则 实战案例 工业4.0 键盘 IPMITOOL BMC 硬件管理 perf rime hive DBeaver 数据仓库 kerberos ui 网络用户购物行为分析可视化平台 大数据毕业设计 asp.net大文件上传下载 中间件 iis 产测工具框架 IMX6ULL 管理框架 小智AI服务端 xiaozhi ASR TTS 云服务 可信计算技术 鲲鹏 AD 域管理 openstack Xen 网站搭建 serv00 系统安全 spark HistoryServer Spark YARN jobhistory Headless Linux cfssl zookeeper nfs P2P HDLC 思科 rsyslog Anolis nginx安装 linux插件下载 ruby ios 自定义客户端 SAS 僵尸世界大战 游戏服务器搭建 elk Logstash 日志采集 无人机 银河麒麟操作系统 国产化 影刀 #影刀RPA# 实习 c 毕昇JDK v10 软件 ldap 上传视频至服务器代码 vue3批量上传多个视频并预览 如何实现将本地视频上传到网页 element plu视频上传 ant design vue vue3本地上传视频及预览移除 ROS 自动驾驶 我的世界服务器搭建 minecraft rdp 远程服务 宠物 毕业设计 免费学习 宠物领养 宠物平台 实时互动 网络工程师 华为认证 黑客技术 小艺 Pura X Typore URL 本地部署 api 并查集 leetcode 架构与原理 多个客户端访问 IO多路复用 回显服务器 TCP相关API 大模型应用 cnn GoogLeNet SSE 交叉编译 LLM Web APP Streamlit gpt-3 文心一言 大文件分片上传断点续传及进度条 如何批量上传超大文件并显示进度 axios大文件切片上传详细教 node服务器合并切片 vue3大文件上传报错提示错误 大文件秒传跨域报错cors cpp-httplib 单例模式 MI300x 安全架构 网络攻击模型 端口测试 田俊楠 Unity Dedicated Server Host Client 无头主机 开发环境 SSL证书 程序员创富 代码托管服务 序列化反序列化 outlook IPv4 子网掩码 公网IP 私有IP bug 主从复制 金融 seatunnel Linux环境 输入法 文件分享 性能测试 odoo 服务器动作 Server action docker run 数据卷挂载 交互模式 网络结构图 Ubuntu共享文件夹 共享目录 Linux共享文件夹 游戏程序 python3.11 视频编解码 7z 知识库 RAGFlow 本地知识库部署 DeepSeek R1 模型 高效日志打印 串口通信日志 服务器日志 系统状态监控日志 异常记录日志 keepalived midjourney 双系统 GRUB引导 Linux技巧 xshell termius iterm2 neo4j 数据库开发 database 远程控制 远程看看 远程协助 超融合 sentinel arm aws xcode 佛山戴尔服务器维修 佛山三水服务器维修 ipython 昇腾 npu 互信 uv glibc 服务网格 istio swoole 三级等保 服务器审计日志备份 FTP服务器 自学笔记 小米 澎湃OS Android 干货分享 黑客工具 密码爆破 软负载 AI-native Docker Desktop 软考 联想开天P90Z装win10 Invalid Host allowedHosts xml 软件构建 执法记录仪 智能安全帽 smarteye tailscale derp derper 中转 triton 模型分析 线性代数 电商平台 虚拟显示器 C++软件实战问题排查经验分享 0xfeeefeee 0xcdcdcdcd 动态库加载失败 程序启动失败 程序运行权限 标准用户权限与管理员权限 CDN cmos 安防软件 rnn 语法 g++ g++13 nac 802.1 portal Cookie 图形渲染 重启 排查 系统重启 日志 原因 黑苹果 arcgis cursor IM即时通讯 剪切板对通 HTML FORMAT MCP server C/S sdkman windows日志 embedding DOIT 四博智联 thingsboard alias unalias 别名 H3C 常用命令 文本命令 目录命令 阿里云ECS Jellyfin Portainer搭建 Portainer使用 Portainer使用详解 Portainer详解 Portainer portainer LORA NLP ceph 代理 源码 前后端分离 regedit 开机启动 mamba Vmamba yaml Ultralytics 可视化 服务器无法访问 ip地址无法访问 无法访问宝塔面板 宝塔面板打不开 深度求索 私域 DNS FunASR Hive环境搭建 hive3环境 Hive远程模式 less file server http server web server DeepSeek r1 Open WebUI webgl cd 目录切换 OpenManus uni-file-picker 拍摄从相册选择 uni.uploadFile H5上传图片 微信小程序上传图片 本地部署AI大模型 京东云 宝塔 LInux 游戏引擎 王者荣耀 flash-attention Wi-Fi 匿名管道 Spring Security 我的世界 我的世界联机 数码 frp 实验 eclipse VMware创建虚拟机 composer bat tidb GLIBC Linux无人智慧超市 LInux多线程服务器 QT项目 LInux项目 单片机项目 Linux的基础指令 epoll ISO镜像作为本地源 视觉检测 云电竞 云电脑 todesk MNN Qwen 移动魔百盒 备份SQL Server数据库 数据库备份 傲梅企业备份网络版 USB转串口 CH340 蓝桥杯 邮件APP 免费软件 saltstack 银河麒麟桌面操作系统 Kylin OS ragflow xss 在线预览 xlsx xls文件 在浏览器直接打开解析xls表格 前端实现vue3打开excel 文件地址url或接口文档流二进 权限 npm 自动化任务管理 pppoe radius Netty 即时通信 NIO prompt easyui langchain wordpress 无法访问wordpess后台 打开网站页面错乱 linux宝塔面板 wordpress更换服务器 SWAT 配置文件 服务管理 网络共享 gaussdb 飞牛nas fnos 分布式训练 kind log4j yum源切换 更换国内yum源 ocr AI agent 链表 思科模拟器 Cisco IO模型 iphone 算力 camera Arduino 电子信息 n8n 工作流 workflow Radius vr googlecloud IDEA qt项目 qt项目实战 qt教程 muduo 国标28181 视频监控 监控接入 语音广播 流程 SIP SDP 小番茄C盘清理 便捷易用C盘清理工具 小番茄C盘清理的优势尽显何处? 教你深度体验小番茄C盘清理 C盘变红?!不知所措? C盘瘦身后电脑会发生什么变化? windwos防火墙 defender防火墙 win防火墙白名单 防火墙白名单效果 防火墙只允许指定应用上网 防火墙允许指定上网其它禁止 根服务器 clickhouse DocFlow matplotlib 社交电子 高效远程协作 TrustViewer体验 跨设备操作便利 智能远程控制 EMQX 通信协议 安卓 EtherCAT转Modbus ECT转Modbus协议 EtherCAT转485网关 ECT转Modbus串口网关 EtherCAT转485协议 ECT转Modbus网关 计算虚拟化 弹性裸金属 lua vue-i18n 国际化多语言 vue2中英文切换详细教程 如何动态加载i18n语言包 把语言json放到服务器调用 前端调用api获取语言配置文件 5G 3GPP 卫星通信 Linux的权限 怎么卸载MySQL MySQL怎么卸载干净 MySQL卸载重新安装教程 MySQL5.7卸载 Linux卸载MySQL8.0 如何卸载MySQL教程 MySQL卸载与安装 显示管理器 lightdm gdm 同步 备份 建站 历史版本 下载 阻塞队列 生产者消费者模型 服务器崩坏原因 etl laravel 直流充电桩 充电桩 音乐库 junit IMX317 MIPI H265 VCU 需求分析 规格说明书 MacOS录屏软件 p2p 监控k8s 监控kubernetes 线程 c/c++ 串口 备选 网站 调用 示例 AD域 反向代理 致远OA OA服务器 服务器磁盘扩容 Claude 游戏机 AnythingLLM AnythingLLM安装 dns 串口驱动 CH341 uart 485 大模型入门 HTTP 服务器控制 ESP32 DeepSeek 模拟器 教程 vasp安装 查询数据库服务IP地址 SQL Server DenseNet 用户缓冲区 模拟实现 语音识别 AutoDL CrewAI 支付 微信支付 开放平台 ArkTs ArkUI 技术共享 qemu libvirt WebVM 策略模式 bcompare Beyond Compare can 线程池 业界资讯 EtherNet/IP串口网关 EIP转RS485 EIP转Modbus EtherNet/IP网关协议 EIP转RS485网关 EIP串口服务器 SysBench 基准测试 SenseVoice 版本 flink linux上传下载 华为机试 EMUI 回退 降级 升级 Kali 渗透 linux安装配置 AISphereButler USB网络共享 Ubuntu DeepSeek DeepSeek Ubuntu DeepSeek 本地部署 DeepSeek 知识库 DeepSeek 私有化知识库 本地部署 DeepSeek DeepSeek 私有化部署 监控k8s集群 集群内prometheus kali 共享文件夹 银河麒麟高级服务器 外接硬盘 Kylin 嵌入式Linux IPC apt ssh漏洞 ssh9.9p2 CVE-2025-23419 UDP的API使用 做raid 装系统 Java Applet URL操作 服务器建立 Socket编程 网络文件读取 armbian u-boot 大模型教程 vmware 卡死 ukui 麒麟kylinos openeuler 自动化编程 迁移指南 trea idea 单元测试 ai小智 语音助手 ai小智配网 ai小智教程 esp32语音助手 diy语音助手 lsb_release /etc/issue /proc/version uname -r 查看ubuntu版本 ftp 灵办AI 火绒安全 CVE-2024-7347 VPS VM搭建win2012 win2012应急响应靶机搭建 攻击者获取服务器权限 上传wakaung病毒 应急响应并溯源 挖矿病毒处置 应急响应综合性靶场 fd 文件描述符 Ubuntu22.04 开发人员主页 autodl 磁盘清理 状态模式 powerpoint dity make 元服务 应用上架 wps 换源 国内源 Debian Qwen2.5-VL vllm searxng 网络药理学 生信 PPI String Cytoscape CytoHubba Docker引擎已经停止 Docker无法使用 WSL进度一直是0 镜像加速地址 镜像 IMM deekseek TCP协议 代理服务器 抗锯齿 拓扑图 hexo 知识图谱 firewall 嵌入式系统开发 极限编程 milvus banner QT 5.12.12 QT开发环境 Ubuntu18.04 GIS 遥感 WebGIS MVS 海康威视相机 大大通 第三代半导体 碳化硅 Windows ai工具 java-rocketmq 推荐算法 聚类 信号 程序 性能分析 proxy模式 内网环境 h.264 figma 虚拟局域网 x64 SIGSEGV xmm0 项目部署到linux服务器 项目部署过程 rag 大模型部署 强化学习 查看显卡进程 fuser onlyoffice 在线office ArtTS OpenSSH 网卡的名称修改 eth0 ens33 显卡驱动 Deepseek-R1 私有化部署 推理模型 UOS1070e 容器技术 SSH 密钥生成 SSH 公钥 私钥 生成 信号处理 人工智能生成内容 SRS 流媒体 直播 nvm whistle ABAP seleium TrueLicense dash 正则表达式 CentOS docker搭建pg docker搭建pgsql pg授权 postgresql使用 postgresql搭建 iperf3 带宽测试 存储维护 NetApp存储 EMC存储 对比 工具 meld DiffMerge sonoma 自动更新 rustdesk visual studio css3 环境配置 lio-sam SLAM 项目部署 ranger MySQL8.0 yolov8 Node-Red 编程工具 流编程 合成模型 扩散模型 图像生成 智能音箱 智能家居 加解密 Yakit yaklang 端口 查看 ss HarmonyOS OpenHarmony 真机调试 deployment daemonset statefulset cronjob 服务器时间 鸿蒙开发 移动开发 流量运营 读写锁 AI Agent 字节智能运维 办公自动化 自动化生成 pdf教程 word ros 防火墙 NAT转发 NAT Server 健康医疗 互联网医院 wsgiref Web 服务器网关接口 sequoiaDB 捆绑 链接 谷歌浏览器 youtube google gmail ardunio BLE 云桌面 微软 AD域控 证书服务器 pyautogui HarmonyOS NEXT 原生鸿蒙 prometheus数据采集 prometheus数据模型 prometheus特点 ragflow 源码启动 相机 运维监控 fstab 端口聚合 windows11 Unity插件 iventoy VmWare OpenEuler Linux find grep 钉钉 top Linux top top命令详解 top命令重点 top常用参数 个人博客 本地化部署 考研 ubuntu20.04 ros1 Noetic 20.04 apt 安装 抓包工具 System V共享内存 进程通信 NLP模型 react native jina 基础环境 chrome 浏览器下载 chrome 下载安装 谷歌浏览器下载 私有化 miniapp 调试 debug 断点 网络API请求调试方法 HiCar CarLife+ CarPlay QT RK3588 UDP rtsp服务器 rtsp server android rtsp服务 安卓rtsp服务器 移动端rtsp服务 大牛直播SDK docker desktop image 玩机技巧 软件分享 软件图标 网络建设与运维 db xpath定位元素 带外管理 MySql grub 版本升级 扩容 游戏开发 信创 信创终端 中科方德 磁盘镜像 服务器镜像 服务器实时复制 实时文件备份 开发 大模型推理 harmonyOS面试题 deep learning docker部署翻译组件 docker部署deepl docker搭建deepl java对接deepl 翻译组件使用 dns是什么 如何设置电脑dns dns应该如何设置 nlp deepseek r1 ubuntu24.04.1 rclone AList webdav fnOS Xinference KylinV10 麒麟操作系统 Vmware 粘包问题 金仓数据库 2025 征文 数据库平替用金仓 fast ubuntu24 vivado24 aarch64 编译安装 HPC 软件卸载 系统清理 HAProxy 免费域名 域名解析 iBMC UltraISO 物联网开发 树莓派 VNC ShenTong perl 李心怡 域名服务 DHCP 符号链接 配置 navicat SEO Python基础 Python教程 Python技巧 Attention WLAN vpn 软链接 硬链接 PX4 AP配网 AK配网 小程序AP配网和AK配网教程 WIFI设备配网小程序UDP开 MacOS 流水线 脚本式流水线 wpf Mac内存不够用怎么办 cocoapods SVN Server tortoise svn virtualbox gnu 问题解决 MDK 嵌入式开发工具 论文笔记 sublime text gromacs 分子动力学模拟 MD 动力学模拟 kotlin ssh远程登录 虚幻引擎 企业网络规划 华为eNSP llama.cpp 浏览器开发 AI浏览器 中兴光猫 换光猫 网络桥接 自己换光猫 win服务器架设 windows server 多端开发 智慧分发 应用生态 鸿蒙OS 烟花代码 烟花 元旦 性能调优 安全代理 su sudo 内网服务器 内网代理 内网通信 网络搭建 神州数码 神州数码云平台 云平台 nosql 通信工程 毕业 conda配置 conda镜像源 MobaXterm 风扇控制软件 稳定性 看门狗 dock 加速 热榜 macOS mm-wiki搭建 linux搭建mm-wiki mm-wiki搭建与使用 mm-wiki使用 mm-wiki详解 js 西门子PLC 通讯 hosts 多路转接 沙盒 浏览器自动化 计算生物学 生物信息 基因组 rpa 达梦 DM8 搜狗输入法 中文输入法 vu大文件秒传跨域报错cors 接口优化 k8s二次开发 CentOS Stream DIFY 搭建个人相关服务器 yolov5 云耀服务器 解决方案 欧标 OCPP docker部署Python 数字证书 签署证书 智能电视 yum换源 WSL2 上安装 Ubuntu 开机黑屏 网络爬虫 增强现实 沉浸式体验 应用场景 技术实现 案例分析 AR 离线部署dify kernel AI员工 服务器正确解析请求体 Sealos 论文阅读 IO