最新资讯

  • 【Linux】多线程(概念,控制)

【Linux】多线程(概念,控制)

2025-04-27 10:00:13 0 阅读

 🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343
🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12625432.html

目录

再谈地址空间

线程概念

创建线程初识

 线程的优点

线程的缺点 

线程异常

Linux进程VS线程 

Linux线程控制 

POSIX线程库 

创建线程

 线程等待

线程函数传参 

线程函数返回值 

 创建多线程

 线程终止

分离线程

 C++11使用多线程


前言

    💬 hello! 各位铁子们大家好哇。

             今日更新了Linux线程的内容
    🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝

再谈地址空间

OS进行内存管理,不是以字节为单位的,而是以内存块为单位的,默认大小是4KB。

系统和磁盘文件进行IO的基本单位是4KB--8个扇区。

文件在磁盘中存的时候是有自己的dateblock的,每个dateblock的大小都是4KB。所以内存管理时,加载就是把程序的数据块加载到指定的内存块中。

为了方便进行表述,4kb的空间+内容有一个名字,叫页框或页帧。 

在内核里有一个struct page来管理每一个页框。内存看成是数组,第一个page的起始地址就是数组下标*4==0 ,第二个page的起始地址是数组下标*4==4。所以每个page都有了下标。 

虚拟地址如何转换为物理地址?

虚拟地址的前10个比特位索引页目录,中间10个比特位索引页表。 页表指向对应页框的起始地址。虚拟地址的低12位+页框的起始地址就能找到页框内的任意一个字节了。

这种页表也叫二级页表,用来搜索页框。

虚拟地址本质是一种资源。

线程概念

  •  在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”
  • 一切进程至少都有一个执行线程
  • 线程在进程内部运行,本质是在进程地址空间内运行
  • 在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化
  • 透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流

 线程:在进程内部运行,是CPU调度的基本单位。

进程:承担分配系统资源的基本实体。

我们以前讲的进程内部都是只有一个执行流的进程。

Windows系统里有struct tcb结构体描述线程,Linux系统选择复用struct pcb结构体。所以Linux是用进程模拟的线程。

Linux中CPU不区分task_struct 是进程还是线程,都看做执行流。

CPU看到的执行流<=进程。

Linux中的执行流叫:轻量级进程。

创建线程初识

功能:创建一个新的线程

参数

  • thread:返回线程ID
  • attr:设置线程的属性,attr为nullptr表示使用默认属性(这里用默认即可)
  • start_routine:是个函数指针,线程启动后要执行的函数。返回值类型为void*,参数类型为void*
  • arg:传给线程启动函数的参数

返回值:成功返回0;失败返回错误码 

直接编译,会报错,说直接创建线程是未定义的行为。 

Linux中要使用线程,编译时要引入pthread库。

运行程序, 因为主次线程里都是死循环打印,结果主次线程都有打印,说明有多执行流,即线程创建成功了。

打印出他们的pid,可以看到主次线程的pid都是一样的,因为这两个线程他们都属于同一个进程内部,所以对应的进程pid是一样的。

如果想查看线程,可以通过指令 ps -aL  。他们的pid都是一样的。LWP就是Light Weight Process,即轻量级进程,就是线程的id。

我们把pid和lwp都相等的执行流叫主线程。

 线程的优点

  •  创建一个新线程的代价要比创建一个新进程小得多
  • 与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多
  • 线程占用的资源要比进程少很多
  • 能充分利用多处理器的可并行数量
  • 在等待慢速I/O操作结束的同时,程序可执行其他的计算任务
  • 计算密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现
  • I/O密集型应用,为了提高性能,将I/O操作重叠。线程可以同时等待不同的I/O操作。

线程的缺点 

  • 性能损失
  • 健壮性降低
    • 编写多线程需要更全面更深入的考虑,在一个多线程程序里,因时间分配上的细微偏差或者因共享了 不该共享的变量而造成不良影响的可能性是很大的,换句话说线程之间是缺乏保护的。(多线程程序,如果其中一个线程出问题,整个进程就会出问题)
  • 缺乏访问控制 

线程异常

  • 单个线程如果出现除零,野指针问题导致线程崩溃,进程也会随着崩溃
  • 线程是进程的执行分支,线程出异常,就类似进程出异常,进而触发信号机制,终止进程,进程终止,该进程内的所有线程也就随即退出 

Linux进程VS线程 

  • 进程是资源分配的基本单位
  • 线程是调度的基本单位
  • 线程共享进程数据,但也拥有自己的一部分数据: 
    • 线程ID
    • 一组寄存器(重要)
    • 栈(重要)(线程运行的时候,会形成各种临时变量,临时变量会被每个线程保存在自己的栈区)
    • errno
    • 信号屏蔽字
    • 调度优先级

进程的多个线程共享同一地址空间,除此之外,各线程还共享以下进程资源和环境:

  • 文件描述符表
  • 每种信号的处理方式(SIG_ IGN、SIG_ DFL或者自定义的信号处理函数)
  • 当前工作目录
  • 用户id和组id

Linux线程控制 

POSIX线程库 

  • 与线程有关的函数构成了一个完整的系列,绝大多数函数的名字都是以“pthread_”打头的
  • 要使用这些函数库,要通过引入头文件
  • 链接这些线程函数库时要使用编译器命令的“-lpthread”选项  

创建线程

前面已经简单介绍了pthread_create的使用。在创建完成后,主线程会继续向下执行代码,新线程会去执行参数3所指向的函数。此时执行流就一分为二了。

 线程等待

功能:等待线程结束

参数

  • thread:线程ID
  • retval:它指向一个指针,指向线程的返回值 (输出型参数)

参数2的类型是void**,用来接收新线程函数的返回值,因为新线程函数的返回值类型是void*。未来要拿到新线程的返回值void*,放到void* retval中时,这里的参数就得传&retval。

返回值:成功返回0;失败返回错误码

如上图,为pthread_create和pthread_join的简单使用。pthread_t类型由库提供。主线程和新线程谁先运行,这是不确定的。 

我们把tid以字符串的形式打印出来,发现是一个虚拟地址,他跟线程id不一样。 

线程函数传参 

线程函数传参,可以传任意类型,一定要记住还可以传类对象的地址。 有了这个,就意味着可以给线程传递多个参数,甚至方法了。

上面的td对象是在主线程的栈上的,新线程访问了主线程栈上的临时变量,我们不推荐这种做法。因为如果main函数有第二个对象,他们在读取时没有影响,但其中一个对象在修改时,另一个也会跟着修改。推荐做法如下图:

我们建议在堆上申请一段空间,未来需要第二个对象时,再重新new一个对象,这样多线程就不会互相干扰了。

线程函数返回值 

如果新线程返回值不是nullptr,而是别的退出信息时。主线程可以在join时拿到退出信息,如上图,定义了一个指针code,这个指针是开辟了空间的,把空间的地址传过去,就能拿到退出信息了。 

返回值还可以是类对象的地址,主线程接收时用对应类类型对象接收即可。

如果新线程异常了,整个进程就崩溃了,包括主线程。因为信号是发给进程的,不是发给线程的。所以只考虑正确的返回值,不考虑异常,因为异常时整个程序就挂掉了。

 创建多线程

下面是完整代码: 

const int num=10;

void* threadrun(void* args)
{
    std::string name=static_cast(args);
    while(true)
    {
        std::cout< tids;
    for(int i=0;i

 运行结果为什么线程名是乱的?因为即使我们的线程是按顺序创建的,但他们不是按顺序启动的。而且上面的name,属于main函数栈上的空间,即main函数栈空间上的公共区传给了每一个线程,所以线程名会被不断覆盖。所以上面这么写是有问题的,要在堆在开辟空间。

 线程终止

 

运行后,发现主线程没有打印quit语句。因为exit是专门用来终止进程的,不能用来终止线程。任意一个线程调用exit,都可能会导致进程退出。 

除了用return结束线程,pthread_exit是专门用来终止一个线程的,使用如下图: 

下面是终止线程的另一种方法: 

主线程调用pthread_cancel取消新线程。取消一个线程的前提是线程得存在。

下面是使用举例:

 线程取消一个就join一个。由上图可知,线程被取消后,线程的退出结果是-1。

-1对应pthread库中的一个宏。

分离线程

  • 默认情况下,新创建的线程是joinable的,线程退出后,需要对其进行pthread_join操作,否则无法释放资源,从而造成系统泄漏。
  • 如果不关心线程的返回值,join是一种负担,这个时候,我们可以告诉系统,当线程退出时,自动释放线程资源
  • joinable和分离是冲突的,一个线程不能既是joinable又是分离的。
  • 如果一个线程被分离,线程的工作状态就是分离状态,不需要被join,但依旧属于进程内部。

 

作用:哪个线程调用该接口,就返回他自己的线程id。相当于以前的getpid。

void* threadrun(void* args)
{
    pthread_detach(pthread_self());
    std::string name=static_cast(args);
    while(true)
    {
        std::cout< tids;
    for(int i=0;i

 运行上面代码,程序直接挂掉了。因为新线程已经分离,主线程不会卡在join,而是会继续往后走,主线程结束了,整个进程就结束了,新线程可能还没起来就死亡了。

所以分离线程后,主线程就可以做自己的事了,不用管新线程。

即使新线程分离,只要分离的线程异常了,还是会影响整个进程。

 

除了可以让新线程自己分离,也可以由主线程进行分离。

 C++11使用多线程

C++11里使用多线程,创建时是支持可变参数的。大致用法跟前文讲的差不多。

我们把makefile文件里的 -lpthread 去掉然后编译。

编译后,报错了,链接时报错。所以C++语言在Linux中要编译支持多线程,也要加 -lpthread。 

 C++11的多线程本质:就是对原生线程库接口的封装。

Linux中,C++11要支持多线程,底层必须封装Linux环境的pthread库,编译的时候都得带。

在Windows下要编译多线程程序不用带-lpthread。 

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

搜索文章

Tags

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