Macvlan 网络类型详解:特点、优势与局限性
一、Macvlan 网络类型的基本概念
1. 什么是 Macvlan
- Macvlan 是 Linux 内核提供的一种网络虚拟化技术,允许在单个物理接口(例如
enp0s3
)上创建多个虚拟网络接口。 - 每个虚拟接口拥有独立的 MAC 地址,表现得像物理网络中的独立设备。
- 在 Docker 或 K8s 中,Macvlan 常用于为容器或 Pod 分配网络接口,使其直接接入物理网络。
2. Macvlan 在 K8s 和 Docker 中的使用
- Docker 示例:
docker network create --driver macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=enp0s3 my-macvlan-network docker run --network my-macvlan-network --ip 192.168.1.100 -d --name container1 gindemo:v2
- 容器分配 IP
192.168.1.100
,直接绑定到enp0s3
。
- 容器分配 IP
- K8s 示例:
- 使用 Macvlan CNI 插件:
{"cniVersion": "0.4.0","name": "macvlan-conf","type": "macvlan","master": "enp0s3","mode": "bridge","ipam": {"type": "host-local","subnet": "192.168.1.0/24","gateway": "192.168.1.1","rangeStart": "192.168.1.100","rangeEnd": "192.168.1.200"} }
- Pod 分配 IP
192.168.1.100
,运行 Web 服务(监听 9090 端口)。
- 使用 Macvlan CNI 插件:
二、Macvlan 网络类型的特点
Macvlan 的设计目标是让虚拟接口(容器或 Pod)直接接入物理网络,同时提供隔离和高性能。以下是其核心特点:
1. 直接接入物理网络
- 特点:
- Macvlan 虚拟接口(例如 Pod 的
eth0
)直接绑定到物理接口(enp0s3
),分配物理网络的 IP(例如192.168.1.100
)。 - 无需 NAT 或网桥,虚拟接口就像物理网络中的独立设备。
- Macvlan 虚拟接口(例如 Pod 的
- 表现:
- Pod 或容器可以直接与外部设备(例如
192.168.1.9
)通信,无需经过主机的 NAT(iptables)。 - 例如,Pod(
192.168.1.100
)可以直接响应外部设备的 ARP 请求,返回自己的 MAC 地址(例如02:42:c0:a8:01:64
)。
- Pod 或容器可以直接与外部设备(例如
- 与桥接网络对比:
- 桥接网络(
bridge
)使用私有 IP(例如172.17.0.2
),需要 NAT 转换才能访问外部网络。 - Macvlan 使用物理网络的 IP,无 NAT 开销。
- 桥接网络(
2. 独立的 MAC 地址
- 特点:
- 每个 Macvlan 虚拟接口分配一个独立的 MAC 地址(例如
02:42:c0:a8:01:64
),与主机的物理接口(enp0s3
,MAC 为52:54:00:ab:cd:ef
)不同。 - 虚拟接口在二层网络(Layer 2)中表现为独立设备。
- 每个 Macvlan 虚拟接口分配一个独立的 MAC 地址(例如
- 表现:
- Pod 或容器可以直接参与二层协议(例如 ARP、LLDP),与外部 DHCP 服务器交互。
- 交换机将虚拟接口视为独立设备,记录其 MAC 地址。
- 与桥接网络对比:
- 桥接网络的容器共享主机的 MAC 地址,外部设备无法区分容器。
- Macvlan 提供更真实的网络模拟。
3. 高性能
- 特点:
- Macvlan 避免了网桥(例如
docker0
)和 NAT 的开销,流量直接通过物理接口(enp0s3
)进出。 - 不需要额外的网络层处理(例如 VXLAN 封装),减少延迟。
- Macvlan 避免了网桥(例如
- 表现:
- Pod(
192.168.1.100
)的流量直接通过enp0s3
进入交换机,性能接近物理设备。 - 适合高吞吐量、低延迟的场景(例如流媒体、数据库)。
- Pod(
- 与桥接网络对比:
- 桥接网络的流量需要经过
docker0
网桥和 NAT(iptables),增加性能开销。
- 桥接网络的流量需要经过
4. 隔离主机与虚拟接口
- 特点:
- Macvlan 默认阻止主机(例如
192.168.1.10
)通过物理接口(enp0s3
)直接访问虚拟接口(Pod 的192.168.1.100
)。 - 这是 Macvlan 的设计特性,旨在模拟“外部设备”模型并增强安全性。
- Macvlan 默认阻止主机(例如
- 原因:
- 虚拟化模型:Macvlan 将虚拟接口视为独立设备,通信需通过“外部”网络(交换机),而主机和虚拟接口共享同一物理接口,导致流量无法回环。
- 安全性:隔离主机与虚拟接口,防止主机直接访问 Pod 或容器,降低安全风险。
- 内核实现:Linux 内核不直接将流量回环到虚拟接口的网络命名空间。
- 表现:
- 主机尝试访问 Pod:
curl http://192.168.1.100:9090
- 结果:连接超时或拒绝。
- 抓包显示:
tcpdump -i enp0s3 -n host 192.168.1.100
- 只有 SYN 包,无响应,说明流量未到达 Pod。
- 主机尝试访问 Pod:
5. 支持多种模式
- 特点:
- Macvlan 支持以下模式,控制虚拟接口之间的通信:
bridge
模式:- 虚拟接口(例如 Pod 和
macvlan0
)之间可以直接通信,类似于连接到同一个虚拟交换机。 - 常用于 K8s 集群,满足 Pod-to-Pod 通信需求。
- 虚拟接口(例如 Pod 和
private
模式:- 虚拟接口之间完全隔离,无法直接通信。
- 适合需要严格隔离的场景(例如多租户环境)。
vepa
模式(Virtual Ethernet Port Aggregator):- 虚拟接口之间的通信需要通过外部交换机回环,支持 hairpin 模式。
- 需要交换机支持 VEPA 功能。
passthru
模式:- 将物理接口直接透传给一个虚拟接口(常用于 SR-IOV 场景)。
- Macvlan 支持以下模式,控制虚拟接口之间的通信:
- 表现:
- K8s 中使用
bridge
模式,Pod 之间可以直接通信(192.168.1.100
访问192.168.1.102
)。 private
模式下,Pod 之间无法通信。
- K8s 中使用
6. 支持 VLAN 隔离
- 特点:
- Macvlan 支持绑定到 VLAN 子接口(通过
-o macvlan_mode=vepa
或配合 VLAN 标签)。 - 可以为不同虚拟接口分配不同的 VLAN ID,实现网络隔离。
- Macvlan 支持绑定到 VLAN 子接口(通过
- 表现:
- 例如,为 Pod A 设置 VLAN 10,为 Pod B 设置 VLAN 20,二者无法直接通信。
- 适合多租户环境或复杂网络拓扑。
7. 跨节点通信依赖物理网络
- 特点:
- 在 K8s 或 Docker 中,跨节点的 Macvlan 通信(例如 Node 1 的 Pod
192.168.1.100
访问 Node 2 的 Pod192.168.1.102
)通过物理网络(交换机)进行。 - 依赖物理网络的支持(例如交换机允许 Macvlan 的 MAC 地址)。
- 在 K8s 或 Docker 中,跨节点的 Macvlan 通信(例如 Node 1 的 Pod
- 表现:
- Pod-to-Pod 通信通过
enp0s3
进入交换机,交换机根据 MAC 地址转发。 - 如果交换机过滤 Macvlan 的 MAC 地址(例如
02:42:c0:a8:01:64
),跨节点通信会失败。
- Pod-to-Pod 通信通过
三、Macvlan 的优势
1. 高性能
- 避免网桥和 NAT 开销,流量直接通过物理接口,适合高性能场景(例如流媒体、数据库)。
2. 直接接入物理网络
- 虚拟接口使用物理网络的 IP(例如
192.168.1.100
),无需 NAT。 - 外部设备可以直接访问 Pod 或容器(例如
192.168.1.9
访问192.168.1.100:9090
),无需端口映射。
3. 独立的 MAC 地址
- 每个虚拟接口有独立 MAC 地址,适合模拟物理设备(例如网络测试、NFV)。
4. 支持 VLAN 隔离
- 配合 VLAN 标签,实现多租户隔离,适合复杂网络环境。
5. 符合 K8s 网络模型
- 在 K8s 中,Macvlan 满足 Pod-to-Pod 无 NAT 通信的要求。
- 例如,Pod A(
192.168.1.100
)可以直接访问 Pod B(192.168.1.102
)。
四、Macvlan 的局限性
1. 主机无法直接访问虚拟接口
- 表现:
- 主机(
192.168.1.10
)无法通过enp0s3
访问 Pod(192.168.1.100
)。
- 主机(
- 原因:
- Macvlan 隔离主机与虚拟接口,流量需通过“外部”网络回环。
- 主机和虚拟接口共享同一物理接口(
enp0s3
),导致流量无法正确路由。
- 解决方法:
- 使用 K8s Service(推荐)。
- 混合使用桥接网络(Multus CNI)。
- 让 Pod 使用
hostNetwork
(谨慎使用)。
2. 跨节点通信依赖物理网络
- 表现:
- 跨节点通信可能受限(例如 Node 1 的 Pod 无法访问 Node 2 的 Pod)。
- 原因:
- 交换机可能过滤 Macvlan 的 MAC 地址。
- 云环境(AWS、GCP、Azure)可能丢弃非主机 MAC 地址的流量。
- 解决方法:
- 确保交换机允许 Macvlan MAC 地址。
- 使用 IPvlan 插件(共享主机 MAC 地址)。
- 使用 Overlay 网络(例如 Flannel、Calico)。
3. IP 管理复杂
- 表现:
- 需要手动配置 IP 范围(
--subnet
或ipam
),可能导致 IP 冲突。
- 需要手动配置 IP 范围(
- 与桥接网络对比:
- 桥接网络由 Docker 或 K8s 自动管理 IP(IPAM),更简单。
4. 网络配置复杂
- 表现:
- 需要启用混杂模式(
ip link set enp0s3 promisc on
)。 - 可能需要手动调整 MTU、ARP 表等。
- 需要启用混杂模式(
- 解决方法:
- 使用更高级的网络插件(例如 Calico)。
五、Macvlan 的适用场景
1. 高性能场景
- 需要低延迟、高吞吐量的应用(例如流媒体、数据库)。
- Macvlan 避免 NAT 和网桥开销,性能接近物理设备。
2. 直接接入物理网络
- 容器或 Pod 需要直接与外部网络通信(例如与外部 DHCP 服务器交互)。
- 外部设备需要直接访问 Pod 或容器(无需端口映射)。
3. 网络测试和 NFV
- 模拟物理设备(每个虚拟接口有独立 MAC 地址)。
- 网络功能虚拟化(NFV),例如虚拟路由器、防火墙。
4. 多租户环境
- 配合 VLAN 标签,实现网络隔离。
- 不同 Pod 或容器分配不同 VLAN,防止相互访问。
5. K8s 集群
- 满足 K8s 的 Pod-to-Pod 通信需求(
bridge
模式)。 - 适用于需要物理网络 IP 的场景。
六、Macvlan 在你的场景中的表现
1. Pod-to-Pod 通信
- 表现:
- 你的 K8s 集群使用 Macvlan CNI(
bridge
模式),Pod 之间可以通过 Pod IP 通信(例如192.168.1.100
访问192.168.1.102:9090
)。
- 你的 K8s 集群使用 Macvlan CNI(
- 原因:
bridge
模式允许同一 Macvlan 网络内的虚拟接口直接通信。- 符合 K8s 网络模型(Pod-to-Pod 无 NAT)。
2. 主机访问 Pod
- 表现:
- 主机(
192.168.1.10
)无法直接访问 Pod(192.168.1.100:9090
)。 - 即使添加了
macvlan0
(192.168.1.254
),仍然失败。
- 主机(
- 原因:
- Macvlan 隔离主机与虚拟接口。
- 网络命名空间隔离、交换机限制或云环境过滤可能导致通信失败。
3. SSH 问题
- 表现:
- 添加
macvlan0
后,主机 SSH 不可达。
- 添加
- 原因:
macvlan0
(192.168.1.254
)与enp0s3
(192.168.1.10
)在同一网段,导致路由冲突或 ARP 混乱。
- 解决方法:
- 删除
macvlan0
或调整路由表。
- 删除
七、总结
Macvlan 网络类型的特点
- 直接接入物理网络:虚拟接口使用物理网络的 IP,无 NAT。
- 独立的 MAC 地址:每个虚拟接口模拟独立设备。
- 高性能:避免网桥和 NAT 开销。
- 隔离主机与虚拟接口:主机无法直接访问 Pod 或容器。
- 支持多种模式:
bridge
、private
、vepa
、passthru
。 - 支持 VLAN 隔离:适合多租户环境。
- 跨节点通信依赖物理网络:可能受限于交换机或云环境。
优势
- 高性能、低延迟。
- 直接接入物理网络,外部访问简单。
- 独立的 MAC 地址,适合网络测试和 NFV。
- 符合 K8s 网络模型。
局限性
- 主机无法直接访问虚拟接口。
- 跨节点通信可能受限。
- IP 管理和网络配置复杂。
建议
- 在 K8s 中:
- 使用 Macvlan 时,优先通过 Service 访问 Pod(例如 ClusterIP 或 NodePort)。
- 如果需要主机访问,考虑混合使用桥接网络(Multus CNI)或使用
hostNetwork
。 - 在云环境,考虑 IPvlan 插件(共享主机 MAC 地址)。
- 在 Docker 中:
- 适合需要直接接入物理网络的场景。
- 主机访问问题可以通过桥接网络或端口映射解决。
相关文章:
Macvlan 网络类型详解:特点、优势与局限性
一、Macvlan 网络类型的基本概念 1. 什么是 Macvlan Macvlan 是 Linux 内核提供的一种网络虚拟化技术,允许在单个物理接口(例如 enp0s3)上创建多个虚拟网络接口。每个虚拟接口拥有独立的 MAC 地址,表现得像物理网络中的独立设备…...
tigase源码学习杂记-AbstractMessageReceiver
前言 废话,最近把工作中用的基于XMPP协议的经典开源框架又读了一遍,整理一下其优秀的源码学习记录。 概述 AbstractMessageReceiver是tigase核心组件MessageRouter、SessionManager的抽象父类,是tigase消息接收器的抽象。AbstractMessageR…...
C#.net core部署IIS
Windows IIS 部署 .NET 应用详细指南 本文档提供了在 Windows Server 上使用 IIS 部署 .NET 应用(包括 .NET Core 和传统 WebForms)的完整步骤和最佳实践。 目录 概述环境准备.NET Core 应用部署 应用准备发布应用在 IIS 中配置应用池配置高级配置 .N…...
sql学习
Name 列中选取唯一不同的值 插入 更新 删除 筛选固定的行数 模糊查询 包含 范围 name的别名是n 两个表交集 左边包含全部 右边包含全部 重复的展示一条 重复的都会展示 创建一个新表,把字段复制近期 创建数据库 约束 创建索引 删除 函数 聚合函数...
OSPF实验
实验要求: 1.R5为ISP,其上只能配置IP地址;R4作为企业边界路由器, 出口公网地址需要通过PPP协议获取,并进行chap认证 (上面这个不会做) 2.整个OSPF环境IP基于172.16.0.0/16划分; 3.所…...
洛谷题目:P8624 [蓝桥杯 2015 省 AB] 垒骰子 题解 (本题简)
题目传送门: P8624 [蓝桥杯 2015 省 AB] 垒骰子 - 洛谷 (luogu.com.cn) 前言: 这道题要求我们计算将 个骰子垒成柱体且满足某些面不能紧贴的不同垒骰字方式的数量,并且结果需要对 取模。下面小亦来带大家逐步分析解题思路: #基本概念理解: 1、骰子特性: 一直骰子的…...
简单线段树的讲解(一点点的心得体会)
目录 一、初识线段树 图例: 编辑 数组存储: 指针存储: 理由: build函数建树 二、线段树的区间修改维护 区间修改维护: 区间修改的操作: 递归更新过程: 区间修改update:…...
在 Node.js 中使用原生 `http` 模块,获取请求的各个部分:**请求行、请求头、请求体、请求路径、查询字符串** 等内容
在 Node.js 中使用原生 http 模块,可以通过 req 对象来获取请求的各个部分:请求行、请求头、请求体、请求路径、查询字符串 等内容。 ✅ 一、基础结构 const http require(http); const url require(url);const server http.createServer((req, res)…...
深度学习--mnist数据集实现卷积神经网络的手写数字识别
文章目录 一、卷积神经网络CNN1、什么是CNN2、核心3、构造 二、案例1、下载数据集(训练、测试集)并展示画布2、打包数据图片3、判断系统使用的是CPU还是GPU4、定义CNN神经网络5、训练和测试模型 一、卷积神经网络CNN 1、什么是CNN 卷积神经网络是一种深…...
python基础知识点(1)
python语句 一行写一条语句 一行内写多行语句,使用分号分隔建议每行写一句,且结束时不写分号写在[ ]、{ }内的跨行语句,被视为一行语句\ 是续行符,实现分行书写功能 反斜杠表示下一行和本行是同一行 代码块与缩进 代码块复合语句…...
详解反射型 XSS 的后续利用方式:从基础窃取到高级组合拳攻击链
在网络安全领域,反射型跨站脚本攻击(Reflected Cross-Site Scripting,简称反射型 XSS)因其短暂的生命周期和临时性,常被视为“低危”漏洞,威胁性不如存储型或 DOM 型 XSS。然而,这种看法低估了它…...
【问题笔记】解决python虚拟环境运行脚本无法激活问题
【问题笔记】解决python虚拟环境运行脚本无法激活问题 错误提示问题所在解决方法**方法 1:临时更改执行策略****方法 2:永久更改执行策略** **完整流程示例** 错误提示 PS F:\PythonProject\0419graphrag-local-ollama-main> venv1\Scripts\activate…...
CF148D Bag of mice
题目传送门 思路 状态设计 设 d p i , j dp_{i, j} dpi,j 表示袋中有 i i i 个白鼠和 j j j 个黑鼠时, A A A 能赢的概率。 状态转移 现在考虑抓鼠情况: A A A 抓到白鼠:直接判 A A A 赢,概率是 i i j \frac{i}{i j}…...
精益数据分析(6/126):深入理解精益分析的核心要点
精益数据分析(6/126):深入理解精益分析的核心要点 在创业和数据驱动的时代浪潮中,我们都在不断探索如何更好地利用数据推动业务发展。我希望通过和大家分享对《精益数据分析》的学习心得,一起在这个充满挑战和机遇的领…...
package.json ^、~、>、>=、* 详解
package.json ^、~、>、>、* 详解 在 Vue 项目中,package.json 文件的依赖项(dependencies)和开发依赖项(devDependencies)中,版本号前可能会带有一些特殊符号,例如 ^、~、>、<、&g…...
2025年赣教云智慧作业微课PPT模板
江西的老师们注意,2025年赣教云智慧作业微课PPT模版和往年不一样,千万不要搞错了,图上的才是正确的2025年的赣教云智慧作业微课PPT模版,赣教云智慧作业官网有问题,无法正确下载该模板,需要该模板的…...
Java PrintStream 类深度解析
Java PrintStream 类深度解析 便捷: 1.直接输出各种数据 2.自动刷新和自动换行(println方法) 3.支持字符串转义 4.自动编码(自动根据环境选择合适的编码方式) 1. 核心定位 PrintStream 是 FilterOutputStream 的子类,提供格式化输出能力,是标准输出 System.out 的…...
超简单的git学习教程
本博客仅用于记录学习和使用 前提声明全部内容全部来自下面廖雪峰网站,如果侵权联系我删除 1.小白学习看这篇,快速易懂入门,完整内容(半天完成学习本地和远程仓库建立) 简介 - Git教程 - 廖雪峰的官方网站 2.博客中…...
Yocto项目实战教程-第5章-5.1-5.2小节-BitBake的起源与源代码讲解
🔍 B站相应的视频教程: 📌 Yocto项目实战教程-第5章-5.1-5.2小节-BitBake的起源与源代码讲解 记得三连,标为原始粉丝。 📚 系列持续更新中,B站搜索 “嵌入式 Jerry”,系统学 Yocto 不迷路&#…...
SQL注入相关知识
一、布尔盲注 1、布尔盲简介 布尔盲注是一种SQL注入攻击技术,用于在无法直接获取数据库查询结果的情况下,通过页面的响应来判断注入语句的真假,从而获取数据库中的敏感信息 2、布尔盲注工作原理 布尔盲注的核心在于利用SQL语句的布尔逻辑…...
Linux网络编程 深入解析Linux TCP:TCP实操,三次握手和四次挥手的底层分析
知识点1【TCP编程概述】 1、TCP的概述 客户端:主动连接服务器,和服务器进行通信 服务器:被动被客户端连接,启动新的线程或进程,服务器客户端(并发服务器) 这里重复TCP和UDP特点 TCP&#x…...
实验4基于神经网络的模式识别实验
实验原理 1. BP学习算法是通过反向学习过程使误差最小,其算法过程从输出节点开始,反向地向第一隐含层(即最接近输入层的隐含层)传播由总误差引起的权值修正。BP网络不仅含有输入节点和输出节点,而且含有一层或多层隐(层)节点。输入信号先向前…...
Rust网络编程实战:全面掌握reqwest库的高级用法
一、开篇导引 1.1 对比Python Requests解释为何reqwest是Rust生态的标杆HTTP客户端 在Python生态中,Requests 库以其简洁易用的API成为了HTTP客户端的首选。它使得开发者能够轻松地发送各种HTTP请求,处理响应,而无需过多关注底层细节。然而…...
【漫话机器学习系列】211.驻点(Stationary Points)
驻点(Stationary Points):理解函数导数为零的关键位置 在数学分析、机器学习优化、物理建模等领域中,驻点(Stationary Points)是一个非常重要的概念。它们是函数图像中“停下来的点”,即导数为…...
图 - 最小生成树算法 - Kruskal - Prim
目录 前言 什么是最小生成树算法 Kruskal 克鲁斯卡尔 Prim 普利姆 结语 前言 在图中一共有两类算法,一种是最短路径,还有一种就是本篇要讲解的最小生成树算法了 其中,最短路径一共有三种,而最小生成树一共有两种ÿ…...
linux kernel irq相关函数详解
在Linux内核驱动开发中,处理中断涉及一系列关键函数,正确使用这些函数对确保驱动的稳定性和性能至关重要。以下是disable_irq、free_irq、platform_get_irq和request_irq等函数的详细解析,涵盖其功能、用法、注意事项及示例代码。 一、核心函…...
聊聊Doris的数据模型,如何用结构化设计解决实时分析难题
传统 OLAP 系统的局限 在大数据实时分析领域,数据模型设计直接决定了系统的查询性能、存储效率与业务适配性。Apache Doris作为新一代MPP分析型数据库,通过独创的多模型融合架构,在业内率先实现了"一份数据支持多种分析范式"的能力…...
[Swift]Xcode模拟器无法请求http接口问题
1.以前偷懒一直是这样设置 <key>NSAppTransportSecurity</key> <dict><key>NSAllowsArbitraryLoads</key><true/> </dict> 现在我在Xcode16.3上,这种设置方式在真机上能请求http(应该是设备开启了开发者模式…...
kafka认证部署
首先启动 zookeeper /home/kafka/bin/zookeeper-server-start.sh /home/kafka/config/zookeeper.properties 创建SCRAM证书 /home/kafka/bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config SCRAM-SHA-256[iterations8192,passwordliebe],SCRAM-SHA-512[p…...
基于STM32中断讲解
基于STM32中断讲解 一、NVIC讲解 简介:当一个中断请求到达时,NVIC会确定其优先级并决定是否应该中断当前执行的程序,以便及时响应和处理该中断请求。这种设计有助于提高系统的响应速度和可靠性,特别是在需要处理大量中断请求的实…...
Java 动态代理教程(JDK 动态代理)(以RPC 过程为例)
1. 什么是动态代理 在运行时为指定的接口自动生成代理对象,并通过 invoke 方法增强了这些对象的功能 2. 两个核心组件 java.lang.reflect.Proxy类 这个类提供了方法:newProxyInstance()用来创建一个代理对象 public static Object newProxyInstance(…...
Linux Privilege Escalation: LD_PRELOAD
声明:本文所有操作需在授权环境下进行,严禁非法使用! 0x01 什么是 LD_PRELOAD? LD_PRELOAD 是 Linux 系统中一个特殊的环境变量,它允许用户在程序启动时优先加载自定义的动态链接库(.so 文件)&…...
Java 并发性能优化:线程池的最佳实践
Java 并发性能优化:线程池的最佳实践 在 Java 并发编程的世界里,线程池堪称提高应用性能与稳定性的神器。恰如其分地运用线程池,能让我们在多线程任务调度时游刃有余,既能避免线程频繁创建销毁带来的开销,又能合理管控…...
QML动画--ParallelAnimation和SequentialAnimation
一、ParallelAnimation ParallelAnimation 是 QML 中用于并行执行多个动画的容器动画类型,可以同时运行多个子动画。 基本用法 qml import QtQuick 2.15Rectangle {id: rectwidth: 100; height: 100color: "red"x: 0; y: 0; opacity: 1.0ParallelAnim…...
深入解析进程与线程:区别、联系及Java实现
引言 在现代操作系统中,进程和线程是并发编程的两大核心概念。理解它们的区别与联系对开发高性能、高可靠性的程序至关重要。本文将通过原理分析和Java代码示例,深入探讨这两个关键概念。 一、基本概念 1.1 进程(Process) 定义&…...
c++:线程(std::thread)
目录 从第一性原理出发:为什么需要线程? ✅ 本质定义: 📌 使用基本语法: 线程之间的“并发”与“并行”的区别 线程安全与数据竞争(Race Condition) 如何让线程“安全地”访问数据&#x…...
基于LSTM-AutoEncoder的心电信号时间序列数据异常检测(PyTorch版)
心电信号(ECG)的异常检测对心血管疾病早期预警至关重要,但传统方法面临时序依赖建模不足与噪声敏感等问题。本文使用一种基于LSTM-AutoEncoder的深度时序异常检测框架,通过编码器-解码器结构捕捉心电信号的长期时空依赖特征&#…...
[密码学基础]GM/T 0018-2023 密码设备应用接口规范深度解析:技术革新与开发者实践
GM/T 0018-2023 密码设备应用接口规范深度解析:技术革新与开发者实践 GM/T 0018-2023《密码设备应用接口规范》是中国密码行业的重要标准,于2023年12月4日发布,2024年6月1日正式实施,替代了2012年版标准。该标准旨在规范密码设备…...
深入理解 Java 多线程:锁策略与线程安全
文章目录 一、常见的锁策略1. 乐观锁&&悲观锁2. 读写锁3. 重量级锁&&轻量级锁4. 自旋锁5. 公平锁&&不公平锁6. 可重入锁 && 不可重入锁 二、CAS1. 什么是 CAS2. CAS 是怎么实现的3.CAS 有哪些应用1) 实现原子类2) 实现自旋锁 4. CAS 的 ABA 问…...
Java从入门到“放弃”(精通)之旅——数组的定义与使用⑥
Java从入门到“放弃”(精通)之旅🚀——数组⑥ 前言——什么是数组? 数组:可以看成是相同类型元素的一个集合,在内存中是一段连续的空间。比如现实中的车库,在java中,包含6个整形类…...
VsCode搭建
安全性问题的声明: VScode是一个由微软出品的开源软件编辑器 VScode下载 https://code.visualstudio.com/Download 官网直接下载即可,windows和linux的vscode使用命令是类似的。 VScode插件相关 为了方便安装,推荐设置并使用vscode插件的…...
【NLP 65、实践 ⑯ 基于Agent优化文章】
羁绊由我而起,痛苦也由我承担 —— 25.4.18 一、⭐【核心函数】定义大模型调用函数 call_large_model prompt:用户传入的提示词(如 “请分析这篇作文的主题”),指导模型执行任务 client:Zhipu…...
【Redis】从单机架构到分布式,回溯架构的成长设计美学
前言 🌟🌟本期讲解关于分布式架构的发展相关知识介绍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 🎆那么废…...
增量式PID基础解析与代码实例:温控系统
目录 1. 前言 2. 增量式PID控制的基本原理 2.1 PID控制的基本概念 2.2 增量式PID控制的特点 3. 增量式PID控制的Python实现:温控系统 3.1 构建增量式PID控制器 3.2 使用增量式PID控制器 3.3 运行模拟 3.4 完整代码 4. 参数调整与优化 4.1 参数选择 4.2…...
数据结构——栈以及相应的操作
栈(Stack) 在维基百科中是这样定义的: 堆栈(stack) 又称为栈或堆叠,是计算机科学中的一种抽象资料类型,只允许在有序的线性资料集合中的一端(称为堆栈顶端,top)进行加入数据(push)和…...
opencv 图像的旋转
图像的旋转 1 单点旋转2. 图片旋转(cv2.getRotationMatrix2D)3. 插值方法3.1 最近邻插值(cv2.INTER_NEAREST)3.2 双线性插值(cv2.INTER_LINEAR)3.3 像素区域插值(cv2.INTER_AREA)3.4 双三次插值(cv2.INTER_CUBIC&#…...
P3916 图的遍历
P3916 图的遍历 题目来源-洛谷 题意 有向图中,找出每个节点能访问到的最大的节点 思路 每个节点的最大节点,不是最长距离,如果是每个节点都用dfs去找最大值,显然1e6*1e6 超时了,只能60分从第一个节点开始遍历&…...
Vue3 + Three.js 场景编辑器开发实践
文章目录 前言项目背景与意义项目技术栈在线演示核心功能实现1. 智能化场景管理2. 专业级模型处理3. 可视化材质与照明4. 相机与渲染引擎5. 场景操作 项目优势开发目标1. 几何模型和模型导入,场景新建按钮增加2. 提供场景内容的可视化编辑功能3. 渲染器场景…...
Vue3 本地打包启动白屏解决思路!! !
“为什么我访问 http://127.0.0.1:5501/index.html 白屏,删了 index.html 再访问 / 就又活过来了?” —— 你的项目与 SPA 路由的“宫斗大戏” 一、问题复现 场景 本地通过 VSCode Live Server(或其他静态服务器)启动了打包后的 V…...
Ubuntu 安装 Docker 教程(官方推荐方式)
✅ 步骤 1:卸载旧版本(如果有) for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done---### ✅ 步骤 2:更新 APT 索引并安装依赖项bash sudo a…...