NUMA架构介绍
NUMA 架构详解
NUMA(Non-Uniform Memory Access,非统一内存访问) 是一种多处理器系统的内存设计架构,旨在解决多处理器系统中内存访问延迟不一致的问题。与传统的 UMA(Uniform Memory Access,统一内存访问)架构不同,NUMA 架构中每个处理器访问不同内存区域的速度可能不同。以下是 NUMA 架构的详细介绍,包括架构细节、CPU 和内存的组合方式、缓存层次、涉及的硬件及其作用,以及 NUMA 架构的优势和原因。
1. NUMA 架构的基本概念
-
NUMA 节点(NUMA Node):
-
一个 NUMA 节点通常由一个或多个 CPU 核心(Processor Cores)和与之直接连接的本地内存(Local Memory)组成。
-
每个 NUMA 节点可以独立运行,拥有自己的内存控制器和内存通道。
-
多个 NUMA 节点通过高速互联网络(如 Intel 的 QPI 或 AMD 的 Infinity Fabric)连接。
-
-
本地内存(Local Memory):
-
每个 NUMA 节点的内存是其本地内存,访问速度最快,延迟最低。
-
-
远程内存(Remote Memory):
-
当一个 NUMA 节点访问另一个 NUMA 节点的内存时,需要通过互联网络,访问速度较慢,延迟较高。
-
-
内存访问延迟的不一致性:
-
在 NUMA 架构中,内存访问延迟取决于内存的位置。本地内存访问速度快,远程内存访问速度慢,因此称为“非统一内存访问”。
-
2. NUMA 架构的细节
(1)CPU 和内存的组合方式
-
多处理器系统:
-
NUMA 架构通常用于多处理器系统,每个处理器(或处理器组)与一部分内存直接相连。
-
例如,一个系统可能有 2 个 NUMA 节点,每个节点包含 16 个 CPU 核心和 64GB 本地内存,总内存为 128GB。
-
-
内存控制器:
-
每个 NUMA 节点有自己的内存控制器,负责管理本地内存的访问。
-
内存控制器直接连接到 CPU 和本地内存,减少了访问延迟。
-
-
互联网络:
-
NUMA 节点之间通过高速互联网络(如 Intel 的 QPI、AMD 的 Infinity Fabric 或 PCIe)连接。
-
当一个 NUMA 节点需要访问另一个节点的内存时,数据通过互联网络传输。
-
(2)缓存层次(Cache Hierarchy)
-
L1 缓存:
-
每个 CPU 核心有自己的 L1 缓存,分为指令缓存(L1-I)和数据缓存(L1-D)。
-
L1 缓存速度最快,容量最小,通常为几十 KB。
-
-
L2 缓存:
-
每个 CPU 核心或一组核心共享 L2 缓存。
-
L2 缓存速度比 L1 缓存稍慢,容量较大,通常为几百 KB 到几 MB。
-
-
L3 缓存:
-
每个 NUMA 节点内的所有 CPU 核心共享 L3 缓存。
-
L3 缓存速度比 L2 缓存慢,容量最大,通常为几十 MB。
-
L3 缓存在 NUMA 架构中起到重要作用,可以减少对内存的访问次数,尤其是远程内存访问。
-
(3)内存访问路径
-
本地内存访问:
-
CPU 访问本地内存时,数据直接通过内存控制器读取或写入,延迟低,带宽高。
-
-
远程内存访问:
-
CPU 访问远程内存时,数据需要通过互联网络传输到目标 NUMA 节点,延迟较高,带宽较低。
-
(4)NUMA 拓扑结构
-
NUMA 架构的拓扑结构可以是多种形式,例如:
-
对称 NUMA:所有 NUMA 节点之间的互联延迟相同。
-
非对称 NUMA:某些 NUMA 节点之间的互联延迟可能比其他节点更高。
-
3. NUMA 架构涉及的硬件及其作用
(1)CPU 核心(Processor Cores)
-
作用:执行计算任务。
-
特点:每个核心有自己的 L1 和 L2 缓存,核心之间通过共享的 L3 缓存和内存控制器访问内存。
(2)内存控制器(Memory Controller)
-
作用:管理 CPU 对内存的访问。
-
特点:每个 NUMA 节点有自己的内存控制器,负责本地内存的访问。
(3)高速缓存(Cache)
-
L1 缓存:最快但容量最小,用于存储核心最常用的指令和数据。
-
L2 缓存:速度较快,容量较大,用于存储核心或核心组的常用数据。
-
L3 缓存:速度较慢但容量最大,用于存储 NUMA 节点内所有核心的共享数据,减少对内存的访问。
(4)互联网络(Interconnect)
-
作用:连接多个 NUMA 节点,实现节点之间的数据传输。
-
特点:高速互联网络(如 Intel 的 QPI、AMD 的 Infinity Fabric)决定了远程内存访问的延迟和带宽。
(5)内存(Memory)
-
本地内存:每个 NUMA 节点的本地内存,访问速度快。
-
远程内存:其他 NUMA 节点的内存,访问速度较慢。
4. NUMA 架构的优势
(1)扩展性
-
NUMA 架构支持更多的处理器和更大的内存容量。
-
每个 NUMA 节点可以独立扩展,系统可以通过增加 NUMA 节点来提升计算能力和内存容量。
(2)性能优化
-
数据局部性:
-
NUMA 架构通过将任务和数据分配到本地内存,减少了远程内存访问的次数,从而降低了内存访问延迟。
-
操作系统和应用程序可以通过 NUMA 感知的调度策略,优化任务和数据的分布。
-
-
高带宽:
-
每个 NUMA 节点有自己的内存通道,多个节点可以并行访问内存,提高了整体内存带宽。
-
(3)资源隔离
-
NUMA 架构可以将任务和内存资源隔离到不同的 NUMA 节点,减少资源竞争,提高系统稳定性。
5. NUMA 架构优势的原因
(1)内存访问延迟的优化
-
在传统的 UMA 架构中,所有处理器共享同一个内存池,随着处理器数量的增加,内存访问竞争加剧,导致延迟增加。
-
NUMA 架构通过将内存分布到多个节点,减少了内存访问竞争,降低了延迟。
(2)带宽的提升
-
每个 NUMA 节点有自己的内存通道,多个节点可以并行访问内存,提高了整体内存带宽。
-
在 UMA 架构中,所有处理器共享有限的内存带宽,容易成为性能瓶颈。
(3)扩展性的提升
-
NUMA 架构通过增加 NUMA 节点来扩展系统,避免了 UMA 架构中总线带宽和内存控制器的瓶颈问题。
6. NUMA 架构的应用场景
-
高性能计算(HPC):
-
NUMA 架构适合需要大量内存和计算资源的科学计算、气象模拟等场景。
-
-
大型数据库系统:
-
数据库系统(如 OLAP、数据仓库)通常需要处理大量数据,NUMA 架构可以优化内存访问性能。
-
-
虚拟化环境:
-
在云计算和数据中心中,NUMA 架构可以优化虚拟机的资源分配,提高虚拟化性能。
-
7. NUMA 架构的挑战
-
编程复杂性:
-
开发者需要显式管理数据局部性,增加了编程难度。
-
-
负载均衡:
-
任务分配需要兼顾 NUMA 节点的计算能力和内存访问延迟,避免性能瓶颈。
-
-
操作系统支持:
-
操作系统需要提供 NUMA 感知的调度和内存分配策略,以充分发挥 NUMA 架构的优势。
-
总结
NUMA 架构通过将内存分布到多个节点,解决了多处理器系统中的内存访问瓶颈问题,提升了系统的扩展性和性能。其优势主要体现在内存访问延迟的优化、带宽的提升和扩展性的增强。尽管 NUMA 架构在编程和负载均衡方面存在挑战,但在高性能计算、大型数据库和虚拟化环境中,NUMA 架构表现出色。通过操作系统、应用程序和硬件的协同优化,可以充分发挥 NUMA 架构的优势。
NUMA架构中的本地内存是指L1、L2、L3 cache缓存还是RAM
在 NUMA(Non-Uniform Memory Access)架构 中,本地内存 并不是指 CPU 的 L1、L2 或 L3 缓存,而是指与某个 NUMA 节点直接连接的 物理内存(DRAM)。缓存(L1、L2、L3)和本地内存是两个不同的概念,它们在 NUMA 架构中扮演不同的角色。以下是对这些概念的详细解释:
1. 本地内存(Local Memory)
-
定义:
-
本地内存是指与某个 NUMA 节点直接连接的 物理内存(DRAM)。
-
每个 NUMA 节点都有自己的本地内存,由该节点的内存控制器管理。
-
本地内存的访问延迟最低,带宽最高,因为数据不需要通过互联网络传输。
-
-
位置:
-
本地内存位于 SoC(System on Chip)之外,通常是主板上的 DRAM 模块。
-
例如,在一个双路服务器中,每个 CPU 插槽(Socket)连接一部分 DRAM,这部分 DRAM 就是该 CPU 的本地内存。
-
-
作用:
-
本地内存用于存储操作系统和应用程序的数据。
-
在 NUMA 架构中,操作系统和应用程序会尽量将数据分配到本地内存,以减少访问延迟。
-
2. 缓存(Cache)
缓存是 CPU 内部的高速存储器,用于加速对内存数据的访问。缓存分为三级:L1、L2 和 L3。
-
L1 缓存:
-
每个 CPU 核心独享的缓存,分为指令缓存(L1-I)和数据缓存(L1-D)。
-
速度最快,容量最小(通常为几十 KB)。
-
用于存储核心最常用的指令和数据。
-
-
L2 缓存:
-
每个 CPU 核心或一组核心共享的缓存。
-
速度比 L1 缓存稍慢,容量较大(通常为几百 KB 到几 MB)。
-
用于存储核心或核心组的常用数据。
-
-
L3 缓存:
-
所有 CPU 核心共享的缓存,通常在一个 NUMA 节点内共享。
-
速度比 L2 缓存慢,但容量最大(通常为几十 MB)。
-
用于存储 NUMA 节点内所有核心的共享数据,减少对内存的访问。
-
-
缓存的作用:
-
缓存用于减少 CPU 访问内存的次数,从而降低内存访问延迟。
-
在 NUMA 架构中,缓存的作用尤为重要,因为它可以减少对远程内存的访问。
-
3. 本地内存与缓存的关系
-
缓存是 CPU 内部的高速存储器,而 本地内存是外部的物理内存(DRAM)。
-
缓存用于加速对内存数据的访问,而本地内存是实际存储数据的地方。
-
当 CPU 需要访问数据时,会首先检查缓存(L1 → L2 → L3),如果缓存中没有所需数据(缓存未命中),才会访问本地内存或远程内存。
4. SoC 上的内存
-
SoC(System on Chip) 是一种将 CPU、内存控制器、I/O 接口等集成在一个芯片上的设计。
-
在 SoC 中,内存控制器通常集成在芯片上,但 物理内存(DRAM) 仍然位于芯片外部。
-
因此,本地内存 是指与 SoC 上的内存控制器直接连接的物理内存,而不是 SoC 内部的缓存。
缓存、RAM、ROM分别是什么
在计算机系统中,缓存(Cache)、RAM(Random Access Memory,随机存取存储器) 和 ROM(Read-Only Memory,只读存储器) 是三种常见的内存类型,它们在系统中扮演不同的角色。除此之外,还有其他一些常见的内存类型。以下是它们的详细介绍:
1. 缓存(Cache)
-
定义:
-
缓存是一种高速存储器,用于存储 CPU 频繁访问的数据和指令,以减少访问主内存(RAM)的次数。
-
缓存通常集成在 CPU 内部,速度远快于主内存。
-
-
特点:
-
速度快:缓存的访问速度比 RAM 快得多,通常以纳秒(ns)为单位。
-
容量小:缓存的容量远小于 RAM,通常为几 KB 到几十 MB。
-
层级结构:现代 CPU 通常有多级缓存(L1、L2、L3),L1 最快但容量最小,L3 最慢但容量最大。
-
-
作用:
-
缓存用于加速 CPU 对数据的访问,减少 CPU 等待数据的时间,从而提高系统性能。
-
2. RAM(Random Access Memory,随机存取存储器)
-
定义:
-
RAM 是计算机的主内存,用于临时存储正在运行的程序和数据。
-
RAM 是易失性存储器,断电后数据会丢失。
-
-
特点:
-
速度快:RAM 的访问速度比 ROM 快,但比缓存慢。
-
容量大:RAM 的容量通常为几 GB 到几百 GB。
-
随机访问:可以随机访问任意地址的数据,访问时间与数据位置无关。
-
-
类型:
-
DRAM(Dynamic RAM,动态随机存取存储器):
-
需要定期刷新以保持数据,速度较慢但成本低,常用于主内存。
-
-
SRAM(Static RAM,静态随机存取存储器):
-
不需要刷新,速度快但成本高,通常用于缓存。
-
-
-
作用:
-
RAM 用于存储操作系统、应用程序和用户数据,是计算机运行时的主要工作区域。
-
3. ROM(Read-Only Memory,只读存储器)
-
定义:
-
ROM 是一种非易失性存储器,用于存储固件或永久性数据。
-
数据在出厂时写入,通常不能修改或只能通过特殊方式修改。
-
-
特点:
-
非易失性:断电后数据不会丢失。
-
只读性:数据通常只能读取,不能随意写入。
-
速度较慢:ROM 的访问速度比 RAM 慢。
-
-
类型:
-
PROM(Programmable ROM,可编程只读存储器):
-
出厂后可以通过特殊设备写入数据,但只能写入一次。
-
-
EPROM(Erasable Programmable ROM,可擦除可编程只读存储器):
-
可以通过紫外线擦除并重新写入数据。
-
-
EEPROM(Electrically Erasable Programmable ROM,电可擦除可编程只读存储器):
-
可以通过电信号擦除并重新写入数据。
-
-
Flash Memory(闪存):
-
一种特殊的 EEPROM,广泛应用于 U 盘、SSD 和嵌入式系统中。
-
-
-
作用:
-
ROM 用于存储固件(如 BIOS、UEFI)和嵌入式系统的程序代码。
-
4. 其他常见的内存类型
(1)虚拟内存(Virtual Memory)
-
定义:
-
虚拟内存是一种内存管理技术,通过将部分数据存储到磁盘(如硬盘或 SSD)来扩展可用内存。
-
-
作用:
-
当物理内存(RAM)不足时,操作系统会将不常用的数据转移到磁盘,腾出空间给当前运行的程序。
-
虚拟内存使得程序可以使用比物理内存更大的地址空间。
-
(2)显存(Video RAM,VRAM)
-
定义:
-
显存是显卡上的专用内存,用于存储图形数据(如纹理、帧缓冲区)。
-
-
特点:
-
显存通常比主内存更快,专为图形处理优化。
-
常见的显存类型包括 GDDR(Graphics Double Data Rate)和 HBM(High Bandwidth Memory)。
-
-
作用:
-
显存用于加速图形渲染和显示输出,是游戏和图形设计等应用的关键。
-
(3)寄存器(Register)
-
定义:
-
寄存器是 CPU 内部的高速存储器,用于存储指令、地址和临时数据。
-
-
特点:
-
速度最快,容量最小(通常为几十到几百字节)。
-
寄存器直接参与 CPU 的运算和控制。
-
-
作用:
-
寄存器用于存储 CPU 当前正在处理的数据和指令,是 CPU 运行的核心部分。
-
(4)非易失性存储器(Non-Volatile Memory,NVM)
-
定义:
-
非易失性存储器是一种断电后数据不会丢失的存储器。
-
-
类型:
-
NAND Flash:用于 SSD、U 盘和存储卡。
-
NOR Flash:用于嵌入式系统和固件存储。
-
3D XPoint:一种新型非易失性存储器,速度接近 DRAM,用于高性能存储设备(如 Intel 的 Optane)。
-
-
作用:
-
非易失性存储器用于长期存储数据和程序。
-
5. 内存的层级结构
计算机系统中的内存通常按速度和容量分为多个层级,从快到慢依次为:
-
寄存器:速度最快,容量最小。
-
缓存(L1、L2、L3):速度较快,容量较小。
-
主内存(RAM):速度较慢,容量较大。
-
虚拟内存(磁盘):速度最慢,容量最大。
这种层级结构通过将频繁访问的数据存储在速度更快的存储器中,优化了系统的整体性能。
总结
-
缓存:高速存储器,用于加速 CPU 对数据的访问。
-
RAM:主内存,用于临时存储运行中的程序和数据。
-
ROM:只读存储器,用于存储固件和永久性数据。
-
其他内存:包括虚拟内存、显存、寄存器和非易失性存储器等,各自在系统中扮演不同的角色。
这些内存类型共同协作,构成了计算机系统的存储层次结构,确保了系统的高效运行。
NUMA架构和sched_domain的关系
NUMA(Non-Uniform Memory Access)架构和 sched_domain
是操作系统调度和内存管理中的核心概念,尤其在多核系统中,它们的关系非常紧密。以下将详细介绍它们的关系,并结合代码和适用场景进行说明。
1. NUMA 架构简介
NUMA 是一种多处理器系统的内存设计架构,其特点是:
-
非均匀内存访问:每个处理器(或处理器组)有自己的本地内存,访问本地内存速度快,访问其他处理器的内存(远程内存)速度慢。
-
节点(Node):NUMA 系统将处理器和内存划分为多个节点,每个节点包含一组 CPU 和本地内存。
-
性能优化:通过减少远程内存访问,提升系统性能。
2. sched_domain 简介
sched_domain
是 Linux 内核调度器中的一个数据结构,用于描述 CPU 的调度层次结构。调度域将 CPU 分组,每个组内的 CPU 共享某些特性(如缓存、NUMA 节点等),调度器根据这些特性优化任务调度和负载均衡。
-
层次结构:调度域可以分层,例如:
-
核心级:同一物理核心的 CPU。
-
套接字号:同一 CPU 插槽的 CPU。
-
NUMA 节点级:同一 NUMA 节点的 CPU。
-
-
负载均衡:调度器会在同一调度域内的 CPU 之间进行负载均衡,避免某些 CPU 过载。
3. NUMA 和 sched_domain 的关系
在 NUMA 系统中,sched_domain
的层次结构与 NUMA 节点紧密相关。调度器会根据 NUMA 节点的特性优化任务调度和负载均衡,具体关系如下:
3.1 NUMA 节点作为调度域
-
每个 NUMA 节点可以作为一个调度域。
-
调度器会优先在同一 NUMA 节点内的 CPU 之间进行负载均衡,以减少远程内存访问的开销。
3.2 任务绑定
-
调度器会尽量将任务绑定到同一 NUMA 节点的 CPU 上,以利用本地内存的优势。
-
如果任务需要访问大量内存,调度器会优先将其分配到内存所在的 NUMA 节点。
3.3 跨节点调度
-
当本地节点负载过高时,调度器可能会将任务迁移到其他 NUMA 节点的 CPU 上。
-
跨节点迁移会带来性能损失(远程内存访问),因此调度器会尽量避免频繁的跨节点迁移。
4. 代码分析
Linux 内核中,sched_domain
和 NUMA 的关系主要通过以下代码体现:
4.1 调度域初始化
在 Linux 内核中,调度域的初始化是通过 build_sched_domains()
函数完成的。该函数会根据系统的拓扑结构(包括 NUMA 节点)创建调度域。
// 内核源码:kernel/sched/core.c
static int build_sched_domains(const struct cpumask *cpu_map, struct sched_domain_attr *attr)
{// 遍历所有 CPU,构建调度域for_each_cpu(cpu, cpu_map) {// 根据 NUMA 节点创建调度域sd = build_sched_domain(topology_core_cpumask(cpu), attr, sd, cpu);if (!sd)goto error;}return 0;
error:return -ENOMEM;
}
4.2 NUMA 节点与调度域绑定
在调度域的构建过程中,内核会通过 topology.c
中的函数获取 NUMA 节点的信息,并将其与调度域绑定。
// 内核源码:arch/x86/kernel/smpboot.c
static void __init init_sched_domains(void)
{// 获取 NUMA 节点信息for_each_online_node(node) {// 为每个 NUMA 节点创建调度域sd = build_sched_domain(node_to_cpumask(node), NULL, NULL, 0);if (!sd)panic("Failed to build sched domains for node %d", node);}
}
4.3 负载均衡与 NUMA
在负载均衡过程中,调度器会优先选择同一 NUMA 节点内的 CPU。
// 内核源码:kernel/sched/fair.c
static int load_balance(int this_cpu, struct rq *this_rq, struct sched_domain *sd, enum cpu_idle_type idle)
{// 检查 NUMA 节点if (sd->flags & SD_NUMA) {// 优先选择同一 NUMA 节点内的 CPUgroup = find_busiest_group(sd, this_cpu, &imbalance, &sd_idle);}// 执行负载均衡return __load_balance(this_cpu, this_rq, sd, idle, &imbalance);
}
5. 适用场景
5.1 高性能计算(HPC)
-
场景:在 HPC 应用中,任务需要频繁访问内存。
-
优化:通过将任务绑定到同一 NUMA 节点的 CPU 上,减少远程内存访问,提升性能。
5.2 虚拟化环境
-
场景:在虚拟机(VM)中运行内存密集型应用。
-
优化:将虚拟机的 vCPU 绑定到同一 NUMA 节点,避免跨节点内存访问。
5.3 数据库服务器
-
场景:数据库服务器需要高效处理大量数据。
-
优化:通过 NUMA 感知的调度策略,将数据库进程绑定到本地内存节点,减少延迟。
6. 总结
NUMA 架构和 sched_domain
的关系主要体现在调度器如何利用 NUMA 节点的特性来优化任务调度和负载均衡。通过将 NUMA 节点作为调度域的一部分,调度器可以更好地管理多核系统中的资源,提升整体性能。在实际应用中,合理配置调度域和 NUMA 绑定可以显著提升内存密集型应用的性能。
相关文章:
NUMA架构介绍
NUMA 架构详解 NUMA(Non-Uniform Memory Access,非统一内存访问) 是一种多处理器系统的内存设计架构,旨在解决多处理器系统中内存访问延迟不一致的问题。与传统的 UMA(Uniform Memory Access,统一内存访问…...
三、0-1搭建springboot+vue3前后端分离-idea新建springboot项目
一、ideal新建项目1 ideal新建项目2 至此父项目就创建好了,下面创建多模块: 填好之后点击create 不删了,直接改包名,看自己喜欢 修改包名和启动类名: 打开ServiceApplication启动类,修改如下: …...
【哇! C++】类和对象(三) - 构造函数和析构函数
目录 一、构造函数 1.1 构造函数的引入 1.2 构造函数的定义和语法 1.2.1 无参构造函数: 1.2.2 带参构造函数 1.3 构造函数的特性 1.4 默认构造函数 二、析构函数 2.1 析构函数的概念 2.2 特性 如果一个类中什么成员都没有,简称为空类。 空类中…...
单片机项目复刻需要的准备工作
一、前言 复刻单片机的项目的时候,有些模块是需要焊接的。很多同学对焊接没有概念。 这里说一下做项目的基本工具。 比如:像这种模块,都需要自己焊接了排针才可以链接的。 二、基本模块 2.1 单排排针 一些模块买回来是没有焊接的&#x…...
Nginx负载均衡配置详解:轻松实现高可用与高性能
在现代Web应用中,负载均衡是确保系统高可用性和高性能的关键技术之一。Nginx作为一款高性能的HTTP服务器和反向代理服务器,其负载均衡功能被广泛应用于各种场景。本文将详细介绍如何使用Nginx实现负载均衡配置,帮助开发者轻松应对高并发和大流…...
SQLAlchemy系列教程:集成Pydantic增强数据处理能力
本教程介绍如何将Pydantic用于数据验证,SQLAlchemy用于数据库操作,从而通过强大的数据处理能力增强Python应用程序。 介绍 在现代web开发中,确保数据的有效性和完整性至关重要。Pydantic和SQLAlchemy是两个功能强大的Python库,可…...
Linux下AWK命令使用方法
文章目录 **一、AWK 基本语法****二、核心概念****1. 内置变量****2. 分隔符****3. BEGIN 和 END 块** **三、常见用法示例****1. 基础打印****2. 条件过滤****3. 计算与统计****4. 字符串操作****5. 处理 CSV 文件** **四、高级用法****1. 使用数组统计****2. 多条件分支&…...
【AI】如何理解与应对AI中的敏感话题:详细分析与实用指南
引言 随着人工智能(AI)技术的不断发展,我们在与AI交互时,可能会遇到敏感话题的讨论限制。在许多情况下,AI系统为了避免触及社会、政治或文化敏感点,会对用户输入进行一定的筛选和过滤。那么,这…...
基于开源库编写MQTT通讯
目录 1. MQTT是什么?2. 开发交互UI3. 服务器核心代码4. 客户端核心代码5. 消息订阅与发布6. 通讯测试7. MQTT与PLC通讯最后. 核心总结 1. MQTT是什么? MQTT(Message Queuing Terlemetry Transport)消息队列遥测协议;是…...
linux指令学习--sudo apt-get install vim
1. 命令分解 部分含义sudo以管理员权限运行命令(需要输入用户密码)。apt-getUbuntu 的包管理工具,用于安装、更新、卸载软件包。installapt-get 的子命令,表示安装软件包。vim要安装的软件包名称(Vim 文本编辑器&…...
PHP之变量
在你有别的编程语言的基础下,你想学习PHP,可能要了解的一些关于变量的信息。 PHP中的变量不用指定数据类型,同时必须用$开头。 全局变量 可以在除函数外任意地方访问,如果需要在函数中访问要先获取 $x 111; function tt() {gl…...
代码规范和简化标准
代码规范和简化标准是编写高质量、可维护、可扩展和可读代码的基本原则。遵循这些标准不仅能提高团队协作效率,还能减少出错的概率和后期维护的成本。以下是一些常见的代码规范和简化标准: 1. 命名规范 变量命名: 使用具有描述性的名称&…...
DeepSeek安全:AI网络安全评估与防护策略
🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 本文基于现有的公开资料,从企业资深网络安全专家的视角,系统梳理DeepSeek技术在网络安全领域的潜在贡献与核心风险,并结合中国…...
开发环境搭建-05.后端环境搭建-前后端联调-通过断点调试熟悉项目代码特点
一.后端环境搭建-前后端联调 首先进行编译,编译通过才能够正常运行,我们可以看到已成功编译通过。 SkyApplication启动成功 登录成功 二.登录操作 1.controller层 package com.sky.controller.admin;import com.sky.constant.JwtClaimsConstant; impo…...
python py文件转为可执行文件(.exe)与 exe文件转py文件
一、py文件转为可执行文件(.exe) #安装 PyInstaller库 pip install pyinstaller #将 Python 脚本打包成一个单一的可执行文件。 pyinstaller --onefile .\123.py 文件或 pyinstaller -F .\123.py 文件 执行这个命令后,PyInstaller 会将123…...
【慕课网wiki项目学习笔记01】Spring Boot 项目搭建
2-2 新建SpringBoot项目 一、创建SpringBoot项目 (1)在SpringBoot官网创建 (2.1)在 IDEA 中创建 Group:公司名 Artifact:项目名 创建成功后开始下载Maven依赖(选择右下角的Import Changes&…...
解锁数据潜能,永洪科技以数据之力简化中粮可口可乐决策之路
企业数字化转型是指企业利用数字技术和信息通信技术来改变自身的商业模式、流程和增值服务,以提高企业的竞争力和创新能力。数字化转型已经成为企业发展的重要战略,尤其在当前信息技术高速发展的时代。数字化转型还涉及到企业与消费者之间的互动和沟通。…...
k-Shape:高效准确的聚类方法
引言 时间数据在许多学科中的扩散和无处不在,已经对时间序列的分析和挖掘产生了极大的兴趣。聚类是最流行的数据挖掘方法之一,不仅因为它的探索性,而且作为其他技术的预处理步骤或子程序。常用的有-means聚类算法。本文介绍了一种新的时间序…...
前端网络安全面试题及答案
前端计算机网络常见面试题目总结_笔描相思的博客_前端计算机网络面试 1.TCP、UDP的区别 ①TCP是有连接的,连接需要三次握手,断开连接需要四次挥手;UDP是无连接的 ②TCP是面向报文的,UDP是面向字节流的 ③TCP是可靠的ÿ…...
9. Flink的性能优化
1. Flink的资源和代码优化 1.1 slot资源配置 Flink中具体跑任务的进程叫TaskManager,TM进程又会根据配置划分出诺干个TaskSlot,它是具体运行SubTask的地方。slot是Flink用来隔离各个subtask的资源集合,这里的资源一把指内存,TCP…...
DeepSeek安装部署笔记(二)
Bat批处理文件的编写 第五步 启动openWebUI的批处理编写1、下面的代码,复制到文本文件,再改扩展名2、这样,在桌面直接双击此文件运行 第五步 启动openWebUI的批处理编写 1、下面的代码,复制到文本文件,再改扩展名 ec…...
【谷粒商城踩坑记】第二坑 renren-fast-vue的node-sass问题
第二坑 renren-fast-vue的node-sass问题 前端开始,第一关就是源码运行,直接报错以下内容: node-sass6.0.1 postinstall: node scripts/build.js 这个在老的前端项目中,特别是使用了sass的项目中经常会出现。 其实当时没有记录下具…...
【Linux-网络】HTTP的清风与HTTPS的密语
🎬 个人主页:谁在夜里看海. 📖 个人专栏:《C系列》《Linux系列》《算法系列》 ⛰️ 道阻且长,行则将至 目录 📚 引言 📚 一、HTTP 📖 1.概述 📖 2.URL ǵ…...
【SpringBoot】数据访问技术spring Data、 JDBC、MyBatis、JSR-303校验
Spring Boot 数据访问技术及特性 目录标题 Spring Boot 数据访问技术及特性摘要1. 引言2. Spring Data架构与原理2.1 Spring Data概述2.2 Spring Data核心组件2.3 Spring Boot与Spring Data的集成机制 3. Spring Boot与JDBC的整合3.1 JDBC整合流程3.2 数据源自动配置3.3 JdbcTe…...
直装永久授权,最新专业版集成VB7
无论是学生、教师还是职场工作人员,办公软件在日常工作和学习中都是不可或缺的重要工具。在众多办公软件中,微软的Microsoft Office和金山软件的WPS Office最常用的选择。对于许多使用要求不高的小伙伴而言,WPS Office因其易用性和免费版本的…...
Ollama 框架本地部署教程:开源定制,为AI 项目打造专属解决方案!
Ollama 是一款开源的本地大语言模型(LLM)运行框架,用于管理和运行语言模型。具有以下核心特点: 开源可定制:采用 MIT 开源协议,开发者能自由使用、阅读源码并定制,可根据自身需求进行功能扩展和…...
【单片机项目】电源如何扩展、电源模块、电池模块如何接线
一、前言 解决2个关键问题: 【1】如果项目编号小于172之前的项目。 可能会遇到电源模块不够接,需要扩展电源的问题。 【2】如果项目编号是大于 172之后项目,部分项目用到了稳压电源模块或者是电池模块。 这篇文章单独讲解一下如何接线。 …...
汽车智能钥匙中PKE低频天线的作用
PKE(Passive Keyless Entry)即被动式无钥匙进入系统,汽车智能钥匙中PKE低频天线在现代汽车的智能功能和安全保障方面发挥着关键作用,以下是其具体作用: 信号交互与身份认证 低频信号接收:当车主靠近车辆时…...
mongodb安装教程以及mongodb的使用
MongoDB是由C语言编写的一种面向文档的NoSQL数据库,旨在为WEB应用提供可扩展的高性能数据存储解决方案。与传统的关系型数据库(如 MySQL 或 PostgreSQL)不同,MongoDB 存储数据的方式是以 BSON(类似于 JSON 的二进制格式…...
SpringMVC学习(controller层加载控制与(业务、功能)bean加载控制、Web容器初始化配置类)(3)
目录 一、SpringMVC、Spring的bean加载控制。 (1)实际开发的包结构层次。 (2)如何"精准"控制两个容器分别加载各自bean。(分析) <1>SpringMVC相关bean加载控制。(方法) <2>Spring相关bean加载控制。(方法) …...
redis基础结构
title: redis基础结构 date: 2025-03-04 08:39:12 tags: redis categories: redis笔记 Redis入门 (NoSQL, Not Only SQL) 非关系型数据库 关系型数据库:以 表格 的形式存在,以 行和列 的形式存取数据,一系列的行和列被…...
树莓派学习(一)——3B+环境配置与多用户管理及编程实践
树莓派学习(一)——3B环境配置与多用户管理及编程实践 一、实验目的 掌握树莓派3B无显示器安装与配置方法。学习Linux系统下多用户账号的创建与管理。熟悉在树莓派上使用C语言和Python3编写简单程序的方法。 二、实验环境 硬件设备:树莓派…...
【音视频】ffplay播放控制
一、ffplay播放控制 1.1、ffplay打开视频 比如我当前目录下现在有一个1.mp4的视频,可以使用下面的命令用ffplay打开并播放它 ffplay 1.mp4输入后回车即可打开相应的视频 1.2 ffplay播放控制 使用q、ESC退出播放按f、双击切换全屏状态按m切换为静音按9减少音量&a…...
【智能体Agent】ReAct智能体的实现思路和关键技术
基于ReAct(Reasoning Acting)框架的自主智能体 import re from typing import List, Tuplefrom langchain_community.chat_message_histories.in_memory import ChatMessageHistory from langchain_core.language_models.chat_models import BaseChatM…...
Redis系列之慢查询分析与调优
Redis 慢查询分析与优化:提升性能的实战指南 Redis 作为一款高性能的内存数据库,因其快速的数据读写能力和灵活的数据结构,被广泛应用于缓存、消息队列、排行榜等多种业务场景。然而,随着业务规模的扩大和数据量的增加࿰…...
分布式锁—2.Redisson的可重入锁一
大纲 1.Redisson可重入锁RedissonLock概述 2.可重入锁源码之创建RedissonClient实例 3.可重入锁源码之lua脚本加锁逻辑 4.可重入锁源码之WatchDog维持加锁逻辑 5.可重入锁源码之可重入加锁逻辑 6.可重入锁源码之锁的互斥阻塞逻辑 7.可重入锁源码之释放锁逻辑 8.可重入锁…...
大模型巅峰对决:DeepSeek vs GPT-4/Claude/PaLM-2 全面对比与核心差异揭秘
文章目录 一、架构设计深度解剖1.1 核心架构对比图谱1.2 动态MoE架构实现架构差异分析表 二、训练策略全面对比2.1 训练数据工程对比2.2 分布式训练代码对比DeepSeek混合并行实现GPT-4 Megatron实现对比 2.3 关键训练参数对比 三、性能表现多维评测3.1 基准测试全景对比3.2 推理…...
解决各大浏览器中http地址无权限调用麦克风摄像头问题(包括谷歌,Edge,360,火狐)后续会陆续补充
项目场景: 在各大浏览器中http地址调用电脑麦克风摄像头会没有权限,http协议无法使用多媒体设备 原因分析: 为了用户的隐私安全,http协议无法使用多媒体设备。因为像摄像头和麦克风属于可能涉及重大隐私问题的API,ge…...
Linux - 网络套接字
一、网络编程 1)地址结构 1. IP地址结构 struct in_addr:是用于表示 IPv4 地址 的结构体,定义在头文件 <netinet/in.h> 中。它的主要作用是存储一个 32 位的 IPv4 地址,通常与 struct sockaddr_in 一起使用。 struct in_a…...
Oracle数据库监听学习
官方文档: Net Services Administrators Guide Net Services Reference 一、动态注册 1.实例启动后,LREG 进程每分钟自动将服务名(service_name)注册到监听器中 也可以通过 alter system register 命令实现立刻注册。&#x…...
利率债、信用债、可转债区别与优势
利率债、信用债、城投债和可转债是债券市场的主要品种,它们在发行主体、风险收益特征和投资优势上各有不同。以下是它们的区别和优势: 1. 利率债 定义:利率债是由政府或政府支持的机构发行的债券,主要包括国债、政策性金融债&…...
C语言番外篇(4)------------------>VS环境下源码的隐藏
假设你是一个优秀的程序员,开发了一款功能十分强大的计算器。现在有一家做计算器的公司看上了你的功能,想通过每一年给你几万块钱使用这个功能。那我们是只提供一个头文件和静态库给他们使用这个功能就行呢?还是连同源代码一起给这家公司呢&a…...
Java集合
写在前面 本人在学习JUC过程中学习到集合和并发时有许多稀碎知识点 需要总结梳理思路与知识点 本文内容会涉及到ArrayList,HashMap以及扩容机制,ConcurrentHashMap,Synchronized,Volatile,ReentrantLock,…...
el-input 设置类型为number时,输入中文后光标会上移,并且会出现上下箭头
光标上移 设置 el-input 的 typenumber后,只能输入数字,输入中文后会自动清空,但是会出现一个问题:【光标会上移,如下图】 解决方法:修改样式 注意:需要使用样式穿透 :deep( ) /*解决el-in…...
迷你世界脚本自定义UI接口:Customui
自定义UI接口:Customui 彼得兔 更新时间: 2024-11-07 15:12:42 具体函数名及描述如下:(除前两个,其余的目前只能在UI编辑器内部的脚本使用) 序号 函数名 函数描述 1 openUIView(...) 打开一个UI界面(注意…...
解决windows npm无法下载electron包的问题
1.将nsis.zip解压到C:\Users\XXX\AppData\Local\electron-builder\Cache 2.将winCodeSign.zip解压到C:\Users\XXX\AppData\Local\electron-builder\Cache 3.将electron-v20.3.8-win32-ia32.zip复制到C:\Users\XXX\AppData\Local\electron\Cache 4.将electron-v20.3.8-win32-…...
Notepad++ 8.6.7 安装与配置全攻略(Windows平台)
一、软件定位与核心优势 Notepad 是开源免费的代码/文本编辑器,支持超过80种编程语言的高亮显示,相比系统自带记事本具有以下优势: 轻量高效:启动速度比同类软件快30%插件扩展:支持NppExec、JSON Viewer等200插件跨文…...
Unity InputField + ScrollRect实现微信聊天输入框功能
1、实现动态高度尺寸的的InputField 通过这两个部件就可以实现inputField的动态改变尺寸。 将inputField放入到scrollview当中作为子类 将scrollview 链接到UIChatInputField脚本中。 2、实现UIChatInputField //聊天输入框(类似wechat) [RequireComp…...
Java-servlet(三)Java-servlet-Web环境搭建(下)详细讲解利用maven和tomcat搭建Java-servlet环境
Java-servlet(三)Java-servlet-Web环境搭建(下)利用maven和tomcat搭建Java-servlet环境 前言一、配置maven阿里镜像二、利用IDEA创建maven文件创建maven文件删除src文件创建新的src模版删除example以及org文件 三、在第二个xml文件…...
在 CLion 中使用 Boost.Test 进行 C++ 单元测试
1. 安装 Boost.Test Boost.Test 是 Boost C 库的一部分,因此需要安装完整的 Boost 库。 方法 1:使用包管理器安装(推荐) Windows(vcpkg) 直接使用 CLion 集成的 vcpkg安装 boost-test: 也可…...