最新资讯

  • 【在Linux世界中追寻伟大的One Piece】多线程(二)

【在Linux世界中追寻伟大的One Piece】多线程(二)

2025-05-08 02:01:30 0 阅读

目录

1 -> 分离线程

2 -> Linux线程互斥

2.1 -> 进程线程间的互斥相关背景概念

2.2 -> 互斥量mutex

2.3 -> 互斥量的接口

2.4 -> 互斥量实现原理探究

3 -> 可重入VS线程安全

3.1 -> 概念

3.2 -> 常见的线程不安全的情况

3.3 -> 常见的线程安全的情况

3.4 -> 常见可重入的情况

3.5 -> 可重入与线程安全联系

3.6 -> 可重入与线程安全区别

4 -> 常见锁的概念

4.1 -> 死锁

4.2 -> 死锁四个必要条件

4.3 -> 避免死锁


1 -> 分离线程

  • 默认情况下,新创建的线程是joinable的,线程退出后,需要对其进行pthread_join操作,否则无法释放资源,从而造成系统泄漏。
  • 如果不关心线程的返回值,join是一种负担,这个时候,我们可以告诉系统,当线程退出时,自动释放线程资源。
int pthread_detach(pthread_t thread);

可以是线程组内其他线程对目标线程进行分离,也可以是线程自己分离。

pthread_detach(pthread_self());

joinable和分离是冲突的,一个线程不能既是joinable又是分离的。

#include 
#include 
#include 
#include 
#include 

void* thread_run(void* arg)
{
	pthread_detach(pthread_self());
	printf("%s
", (char*)arg);
	return NULL;
}

int main(void)
{
	pthread_t tid;
	if (pthread_create(&tid, NULL, thread_run, "thread1run...") != 0 ) 
	{
		printf("create thread error
");
		return 1;
	}

	int ret = 0;
	sleep(1);//很重要,要让线程先分离,再等待
	if (pthread_join(tid, NULL) == 0) 
	{
		printf("pthread wait success
");
		ret = 0;
	}
	else 
	{
		printf("pthread wait failed
");
		ret = 1;
	}

	return ret;
}

2 -> Linux线程互斥

2.1 -> 进程线程间的互斥相关背景概念

  • 临界资源:多线程执行流共享的资源就叫做临界资源。
  • 临界区:每个线程内部,访问临界资源的代码,就叫做临界区。
  • 互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用。
  • 原子性:不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么未完成。

2.2 -> 互斥量mutex

  • 大部分情况,线程使用的数据都是局部变量,变量的地址空间在线程栈空间内,这种情况,变量归属单个线程,其他线程无法获得这种变量。
  • 但有时候,很多变量都需要在线程间共享,这样的变量称为共享变量,可以通过数据的共享,完成线程之间的交互。
  • 多个线程并发的操作共享变量,会带来一些问题。
// 操作共享变量会有问题的售票系统代码
#include 
#include 
#include 
#include 
#include 

int ticket = 100;

void* route(void* arg)
{
	char* id = (char*)arg;
	while (1) 
	{
		if (ticket > 0) 
		{
			usleep(1000);
			printf("%s sells ticket:%d
", id, ticket);
			ticket--;
		}
		else 
		{
			break;
		}
	}
}

int main(void)
{
	pthread_t t1, t2, t3, t4;

	pthread_create(&t1, NULL, route, "thread 1");
	pthread_create(&t2, NULL, route, "thread 2");
	pthread_create(&t3, NULL, route, "thread 3");
	pthread_create(&t4, NULL, route, "thread 4");

	pthread_join(t1, NULL);
	pthread_join(t2, NULL);
	pthread_join(t3, NULL);
	pthread_join(t4, NULL);
}
一次执行结果:
thread 4 sells ticket:100
...
thread 4 sells ticket:1
thread 2 sells ticket:0
thread 1 sells ticket:-1
thread 3 sells ticket:-2

为什么可能无法获得争取结果?

  • if语句判断条件为真以后,代码可以并发的切换到其他线程。
  • usleep这个模拟漫长业务的过程,在这个漫长的业务过程中,可能有很多个线程会进入该代码段。
  • --ticket操作本身就不是一个原子操作。
取出 ticket--部分的汇编代码
objdump -d a.out > test.objdump
152
40064b:
8b 05 e3 04 20 00
mov
0x2004e3(%rip),%eax
# 600b34
153
400651:
83 e8 01
sub
$0x1,%eax
154
400654:
89 05 da 04 20 00
mov
%eax,0x2004da(%rip)
# 600b34

--操作并不是原子操作,而是对应三条汇编指令:

  • load:将共享变量ticket从内存加载到寄存器中。
  • update: 更新寄存器里面的值,执行-1操作。
  • store:将新值,从寄存器写回共享变量 ticket 的内存地址。

要解决以上问题,需要做到三点:

  • 代码必须要有互斥行为:当代码进入临界区执行时,不允许其他线程进入该临界区。
  • 如果多个线程同时要求执行临界区的代码,并且临界区没有线程在执行,那么只能允许一个线程进入该临界区。
  • 如果线程不在临界区中执行,那么该线程不能阻止其他线程进入临界区。要做到这三点,本质上就是需要一把锁。Linux上提供的这把锁叫互斥量。

2.3 -> 互斥量的接口

初始化互斥量

初始化互斥量有两种方法:

  • 方法1,静态分配:
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER
  • 方法2,动态分配:
int pthread_mutex_init(pthread_mutex_t* restrict mutex, const
	pthread_mutexattr_t* restrict attr);

参数:
mutex:要初始化的互斥量
attr:NULL

销毁互斥量

销毁互斥量需要注意:

  • 使用PTHREAD_ MUTEX_ INITIALIZER初始化的互斥量不需要销毁。
  • 不要销毁一个已经加锁的互斥量。
  • 已经销毁的互斥量,要确保后面不会有线程再尝试加锁。
int pthread_mutex_destroy(pthread_mutex_t* mutex);

互斥量加锁和解锁

int pthread_mutex_lock(pthread_mutex_t* mutex);
int pthread_mutex_unlock(pthread_mutex_t* mutex);

返回值:成功返回 0, 失败返回错误号

调用pthread_ lock时,可能会遇到以下情况:

  • 互斥量处于未锁状态,该函数会将互斥量锁定,同时返回成功。
  • 发起函数调用时,其他线程已经锁定互斥量,或者存在其他线程同时申请互斥量,但没有竞争到互斥量,那么pthread_ lock调用会陷入阻塞(执行流被挂起),等待互斥量解锁。

改进上面的售票系统:

#include 
#include 
#include 
#include 
#include 
#include 

int ticket = 100;
pthread_mutex_t mutex;

void* route(void* arg)
{
	char* id = (char*)arg;
	while (1) 
	{
		pthread_mutex_lock(&mutex);
		if (ticket > 0) 
		{
			usleep(1000);
			printf("%s sells ticket:%d
", id, ticket);
			ticket--;
			pthread_mutex_unlock(&mutex);
			// sched_yield(); 放弃 CPU
		}
		else 
		{
			pthread_mutex_unlock(&mutex);
			break;
		}
	}
}

int main(void)
{
	pthread_t t1, t2, t3, t4;

	pthread_mutex_init(&mutex, NULL);

	pthread_create(&t1, NULL, route, "thread 1");
	pthread_create(&t2, NULL, route, "thread 2");
	pthread_create(&t3, NULL, route, "thread 3");
	pthread_create(&t4, NULL, route, "thread 4");

	pthread_join(t1, NULL);
	pthread_join(t2, NULL);
	pthread_join(t3, NULL);
	pthread_join(t4, NULL);

	pthread_mutex_destroy(&mutex);
}

2.4 -> 互斥量实现原理探究

  • 经过上面的例子,大家已经意识到单纯的i++或者++i都不是原子的,有可能会有数据一致性问题。
  • 为了实现互斥锁操作,大多数体系结构都提供了swap或exchange指令,该指令的作用是把寄存器和内存单元的数据相交换,由于只有一条指令,保证了原子性,即使是多处理器平台,访问内存的总线周期也有先后,一个处理器上的交换指令执行时另一个处理器的交换指令只能等待总线周期。现在我们把lock和unlock的伪代码改一下。

3 -> 可重入VS线程安全

3.1 -> 概念

  • 线程安全:多个线程并发同一段代码时,不会出现不同的结果。常见对全局变量或者静态变量进行操作,并且没有锁保护的情况下,会出现该问题。
  • 重入:同一个函数被不同的执行流调用,当前一个流程还没有执行完,就有其他的执行流再次进入,我们称之为重入。一个函数在重入的情况下,运行结果不会出现任何不同或者任何问题,则该函数被称为可重入函数,否则,是不可重入函数。

3.2 -> 常见的线程不安全的情况

  • 不保护共享变量的函数。
  • 函数状态随着被调用,状态发生变化的函数。
  • 返回指向静态变量指针的函数。
  • 调用线程不安全函数的函数。

3.3 -> 常见的线程安全的情况

  • 每个线程对全局变量或者静态变量只有读取的权限,而没有写入的权限,一般来说这些线程是安全的。
  • 类或者接口对于线程来说都是原子操作。
  • 多个线程之间的切换不会导致该接口的执行结果存在二义性常见不可重入的情况。
  • 调用了malloc/free函数,因为malloc函数是用全局链表来管理堆的。
  • 调用了标准I/O库函数,标准I/O库的很多实现都以不可重入的方式使用全局数据结构。
  • 可重入函数体内使用了静态的数据结构。

3.4 -> 常见可重入的情况

  • 不使用全局变量或静态变量。
  • 不使用malloc或者new开辟出的空间。
  • 不调用不可重入函数。
  • 不返回静态或全局数据,所有数据都有函数的调用者提供。
  • 使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据。

3.5 -> 可重入与线程安全联系

  • 函数是可重入的,那就是线程安全的。
  • 函数是不可重入的,那就不能由多个线程使用,有可能引发线程安全问题。
  • 如果一个函数中有全局变量,那么这个函数既不是线程安全也不是可重入的。 

3.6 -> 可重入与线程安全区别

  • 可重入函数是线程安全函数的一种。
  • 线程安全不一定是可重入的,而可重入函数则一定是线程安全的。
  • 如果将对临界资源的访问加上锁,则这个函数是线程安全的,但如果这个重入函数若锁还未释放则会产生死锁,因此是不可重入的。

4 -> 常见锁的概念

4.1 -> 死锁

  • 死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。

4.2 -> 死锁四个必要条件

  • 互斥条件:一个资源每次只能被一个执行流使用。
  • 请求与保持条件:一个执行流因请求资源而阻塞时,对已获得的资源保持不放。
  • 不剥夺条件:一个执行流已获得的资源,在末使用完之前,不能强行剥夺。
  • 循环等待条件:若干执行流之间形成一种头尾相接的循环等待资源的关系。

4.3 -> 避免死锁

  • 破坏死锁的四个必要条件
  • 加锁顺序一致
  • 避免锁未释放的场景
  • 资源一次性分配

感谢各位大佬支持!!!

互三啦!!!

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

搜索文章

Tags

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