- 博客(52)
- 资源 (5)
- 收藏
- 关注
原创 【linux】原子变量与锁原理
特性原子变量 (互斥锁 (std::mutex/ Futex)主要机制CPU 指令 (LOCK, CAS) + 缓存一致性原子指令 (快路径) + 操作系统调度 (慢路径)上下文切换无(一直在用户态运行)有(仅在发生竞争且需要等待时)CPU 占用忙等待时占用高 (如自旋循环),但在简单操作中极低挂起时不占用 CPU,但唤醒和挂起有开销适用场景简单的数据同步 (计数器、标志位)、极低延迟要求复杂的临界区 (包含 IO、大量计算)、长时间持有锁死锁风险无 (但在复杂算法中可能出现活锁)
2026-02-10 14:17:23
721
原创 常见C++编译器套件
C++编译器套件是用于开发C++程序的工具集合,通常包括编译器、链接器、调试器和其他辅助工具,帮助开发者将源代码转换为可执行文件。常见的套件有GCC、Clang/LLVM和MSVC,它们在不同平台上广泛使用。根据可靠来源,这些套件的核心组件类似,但具体实现和优化有所差异。选择套件时,考虑平台兼容性(如Linux用GCC,Windows用MSVC)和性能需求。
2026-02-05 16:13:17
698
原创 【c++】glibc内存管理
分级缓存 + 惰性合并。极速响应: 小内存优先走 Tcache 和 Fastbins,不合并,无锁或低锁,速度极快。兜底整理: 当内存变大或缓存未命中,进入 Unsorted Bin,这是一个“整理中心”,在此处才进行分类放入 Small/Large Bins。空间复用free时,大块内存会积极合并(Coalescing),防止内存碎片化(External Fragmentation)。系统交互: 只有在 Top Chunk 不够或显式缩减时,才与 OS 进行sbrk/mmap。
2026-02-04 15:09:13
664
原创 23种设计模式
解决痛点:需要创建一系列相关的对象(产品族),且不能混用。比如:MacOS的按钮不能配Windows的边框。特点:创建“全家桶”,保证产品族的一致性。使用场景游戏换肤:一套皮肤包含背景、按钮、音效,切换皮肤时整个家族一起换。C++代码// 抽象工厂接口:能造一系列东西简单问题不要用模式:如果你的策略只有两个,用if-else就行,别搞策略模式。创建型模式:当你觉得new一个对象很麻烦,或者需要灵活替换类时再用。结构型模式:当你觉得类太多、关系太乱、接口对不上时再用。行为型模式。
2026-01-30 09:31:37
706
原创 【linux】零拷贝技术
技术方案CPU 拷贝次数上下文切换关键优势传统 I/O24兼容性最强mmap14适合多进程共享读取sendfile12简单高效,静态资源分发首选DMA Gather02目前主流的高性能方案splice02灵活,适合代理服务器RDMA00硬件级,极低延迟。
2026-01-28 18:24:23
1367
原创 【linux内核】一级页 二级页
深入解析:一级页表与二级页表的核心原理与对比——操作系统内存管理的关键设计一、页表的核心作用页表(Page Table)是操作系统实现虚拟内存到物理内存映射的核心数据结构。二、一级页表(单级页表)三、二级页表(多级页表)工作流程(以缺页异常为例)CPU访问未映射的虚拟地址,触发缺页中断。恢复进程执行,重新访问地址。优缺点| 优点 | 缺点 || 内存占用大幅降低(动态分配) | 地址转换需两次内存访问 |
2026-01-28 16:06:32
941
原创 【数据结构】hash表(unordered_map)
unordered_map 的设计强调平均 O(1) 操作,通过负载控制避免长链。与有序 map (红黑树) 不同,无序版依赖好哈希函数(坏哈希导致 O(n) 最坏)。实际源码更复杂(处理异常、迭代器等),可参考 GCC 的 bits/hashtable.h。建议在代码中设置自定义哈希/equal 以优化。如果负载频繁触发 rehash,可用 reserve() 预优化。
2026-01-27 15:06:53
670
原创 【数据结构】stl 容器
std::unordered_multiset:哈希实现的可重复键集合。std::unordered_multimap:哈希实现的可重复键映射。std::array:固定大小数组(C++11引入),编译时确定大小。std::unordered_map:哈希实现的键值对映射(键唯一)。std::queue:队列(FIFO 先进先出),默认基于deque。std::stack:栈(LIFO 后进先出),默认基于deque。std::unordered_set:哈希实现的唯一键集合。
2026-01-16 15:32:42
1033
原创 大页内存详解
大页内存是一种操作系统内存管理机制,将内存分为更大的块(通常2MB或1GB),而非传统的4KB小页。这有助于减少虚拟地址到物理地址的翻译次数,因为CPU的TLB可以覆盖更多内存范围。例如,在x86架构中,标准页大小自1985年以来固定为4KB,但现代系统内存已远超当年水平,导致TLB压力增大。通过使用大页,系统能更高效地处理大规模内存应用。
2026-01-15 19:50:33
936
原创 radis数据库
Redis 支持丰富的原生数据类型,每种类型针对特定问题优化。例如,字符串用于简单键值存储,列表适用于队列。数据类型描述常见命令示例用例字符串 (Strings)最基本类型,支持二进制安全数据缓存计数器、简单数据存储列表 (Lists)双向链表,支持从两端操作消息队列、任务列表集合 (Sets)无序唯一元素集合标签系统、唯一用户集合有序集合 (Sorted Sets)带分数的有序唯一元素排行榜、优先级队列哈希 (Hashes)键值对映射对象存储、用户配置文件。
2026-01-15 16:22:02
717
原创 linux epoll深入讲解
创建 epoll 实例,返回文件描述符。epoll_ctl:添加、修改或删除监控的文件描述符及其事件类型(如 EPOLLIN 表示可读)。epoll_wait:阻塞等待就绪事件,返回事件数组。
2026-01-15 11:31:19
988
原创 硬中断 与 软中断
硬中断(hardirq)是由外部硬件设备(如网卡、硬盘、键盘)自动产生的电信号,用于通知操作系统外设状态的变化。它属于异步中断,发生时间随机,无法预测。特点包括:中断号由中断控制器(如APIC)提供;可通过函数如屏蔽;处理程序需快速执行,称为“上半部”,以避免阻塞系统;支持中断嵌套(除相同类型外)。注册方式通常通过函数,处理函数返回等状态。软中断(softirq)是通过软件指令(如int)触发的机制,主要用于在硬中断后延迟执行耗时任务,属于中断处理的“下半部”。
2026-01-13 16:04:01
1336
原创 hook原理
Hook 的核心概念:Hook 是一种编程技术,用于在不修改源代码的情况下拦截或修改函数的行为,常用于调试、安全监控或功能扩展。研究表明,Hook 的实现方式多样,不同类型采用不同的机制。是否通过修改执行指令:部分 Hook 类型(如 Inline Hook)确实通过直接修改函数的机器指令来实现重定向,但并非所有 Hook 都如此;其他类型可能通过修改地址表或符号替换来达成目的,取决于具体平台和场景。常见应用与注意事项。
2026-01-13 15:58:06
865
原创 linux 虚拟内存
首先,它支持多编程(Multiprogramming),允许多个进程同时驻留内存,通过需求分页仅加载必要部分,提升CPU利用率。第五,提升系统性能:通过逻辑分区管理,虚拟内存使CPU负载更均衡,支持平滑多任务。分段则将内存分为不同大小的段,根据程序结构(如代码段、数据段)管理,段表跟踪每个段的状态,包括是否在内存中或已修改。在Linux中,可通过参数调优缓解,例如vm.swappiness控制交换倾向(默认60,低值减少交换),vm.dirty_ratio设置脏页(修改数据)比例前刷新阈值(默认20%)。
2026-01-13 10:24:54
366
原创 Cisco Netflow
NetFlow 的核心功能在于捕获网络流量统计,而非完整数据包。它帮助识别流量来源、目的地、协议类型和体积,支持应用性能分析、DDoS 检测和 BGP 路由优化。研究表明,它能有效降低网络拥塞并提升资源分配效率,但需结合其他工具如 SNMP 以获得全面视图。例如,在企业环境中,它常用于计费和安全审计。NetFlow 协议基于 UDP 传输流记录,无内置请求-响应包;导出是单向的,收集器被动接收。不同版本格式差异显著:v5 使用固定头部和记录,v9 引入模板以适应 IPv6 和 MPLS 等扩展。
2026-01-09 14:34:27
855
原创 【dpdk】igb_uio
核心上,它充当桥梁,将 PCI 设备的控制权从 Linux 内核转移到用户空间应用程序,从而绕过传统的网络栈,避免不必要的上下文切换和开销。相比 uio_pci_generic,igb_uio 更专为 Intel 设备优化,支持更全面的内存访问,但同样缺乏 IOMMU 保护,导致在多租户环境中潜在的安全风险。社区讨论指出,在复杂环境中(如 ARM 系统或虚拟机),igb_uio 可作为 vfio-pci 的后备选项,但总体趋势是转向更安全的替代方案。
2025-12-31 17:50:31
922
原创 mmap 对比 read
mmap支持MAP_SHARED(共享映射,修改回写文件)和MAP_PRIVATE(私有拷贝-on-write,修改不影响原文件)等标志,进一步扩展其灵活性。然而,mmap并非万能:它要求映射大小为页面大小的整数倍,导致小文件浪费内存(例如,7字节文件可能占用4KB)。实际测试表明,在顺序读取大文件时,fread与mmap性能相当,但mmap在随机访问中可快20-50%。mmap允许直接通过内存指针访问文件内容,避免了传统read/fread的缓冲区拷贝和多次系统调用,尤其适合大文件随机访问场景。
2025-12-31 11:24:55
668
原创 【dpdk】mempool
DPDK Mempool 提供高效的固定大小对象分配框架,取代传统 malloc 在数据平面中的使用,避免碎片化和不确定延迟。库位于 librte_mempool,支持命名唯一标识,并可集成外部内存系统。高性能:批量操作和锁免费访问。多核友好:NUMA 感知和缓存优化。灵活性:自定义处理器支持。
2025-12-30 15:10:33
487
原创 网络开发框架VPP
VPP 的架构分为多个层:基础设施层(VPP Infra)、向量处理库(VLIB)、网络层(VNET)和插件层。数据处理采用图节点模型,工作者线程并行处理包向量,实现优化如流水线和预取。Vector Packet Processing(VPP)是一个开源的、高性能网络数据平面框架,由 FD.io 项目开发而成。
2025-12-26 17:43:39
804
原创 【协议】vlan
配置 VLAN 通常在交换机上进行。首先创建 VLAN(如 VLAN 10),然后将端口分配到特定 VLAN。帧进入交换机时,如果是 Access 端口,会添加标签;Trunk 端口则允许多个 VLAN 流量通过。默认 VLAN 为 VLAN 1,常用于管理,但建议避免使用以防安全问题。VLAN 是虚拟局域网的缩写,指在物理层上模拟多个独立的 LAN。通过 VLAN,网络管理员可以根据部门、应用或安全需求分组设备,而无需物理重新布线。广播域隔离。
2025-12-24 18:03:12
597
原创 单播、广播和多播
单播、广播和多播是计算机网络中数据传输的三种主要方式,它们基于目的地址决定数据如何分发。在以太网层,这些方式通过MAC地址区分,确保数据正确到达接收者。单播强调精确传输,广播确保全覆盖,多播实现组播效率。网络通信的核心在于如何将数据从源端发送到目的端。单播:一对一(one-to-one),类似于私人信件,只有一个发送者和一个接收者。广播:一对所有(one-to-all),类似于公共广播,所有网络成员都能收到。多播:一对多(one-to-many),类似于订阅服务,只有感兴趣的组成员接收。
2025-12-10 09:48:10
916
原创 【dpdk】rte_ring
rte_ring 是 DPDK(Data Plane Development Kit)中一种高效的无锁环形队列实现,专为高性能网络和数据处理设计。它基于固定大小的数组,提供 FIFO(First-In-First-Out)语义,支持多线程并发访问,而无需传统锁机制,从而减少上下文切换和延迟。DPDK 官方文档指出,这种结构在多核环境中特别有效,因为它利用 CPU 的原子操作来协调生产者和消费者。
2025-12-09 15:12:11
831
原创 交换机 详解
网络交换机(Network Switch)是现代计算机网络中的核心设备,它负责在局域网(LAN)内高效传输数据。研究表明,交换机通过智能转发机制显著提升了网络性能,与早期的集线器相比,避免了不必要的广播流量。根据权威来源,交换机已成为企业级网络不可或缺的部分,尽管在某些简单场景下可能被路由器部分替代。
2025-12-08 14:20:47
1146
原创 OSI 七层模型
OSI模型将复杂网络过程抽象为七个独立层,低层(1-4)处理传输,高层(5-7)管理应用。每个层使用协议处理数据,并通过接口与相邻层交互。这种分层设计便于故障隔离和模块化开发。层级名称主要功能数据单元典型协议示例7应用层提供用户接口和网络服务数据6表示层数据格式转换、加密解密数据5会话层管理会话建立、维护和终止数据4传输层端到端可靠传输、流量控制段/包TCP, UDP3网络层路由选择、地址解析数据包IP, ICMP2数据链路层。
2025-12-05 14:45:43
1167
原创 【路由器】NAT
NAT是一种地址映射机制,最初设计用于缓解IPv4地址短缺问题。根据RFC 1918标准,私有IP地址段(如10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)仅限于内部网络使用,无法在公共互联网路由。路由器作为NAT设备,充当内外网的桥梁,通过修改IP数据包的头部信息实现通信透明化。NAT不仅限于路由器,还可集成在防火墙或专用网关中,但路由器是最常见的应用场景,如家庭宽带路由器或企业级设备。
2025-12-05 14:10:02
1230
原创 路由器 详解
在现代网络环境中,路由器是连接设备与互联网的核心桥梁。它不仅仅是家庭或企业网络的“门卫”,更是数据流动的智能调度者。本文将从路由器的基本作用入手,逐步讲解其重要功能和工作原理,帮助读者快速理解这一关键网络设备。
2025-12-04 14:09:05
1049
原创 【路由器】路由
RIB是"控制平面"的所有候选路由;FIB/CEF是"数据平面"的高效查表,用来线速转发。RIB:保存所有候选与策略,用来"选路"。存"所有可能"。FIB:保存选好的最优结果,用来"高速转发"。存"现在就用的"。每个报文查询的是转发表,而非路由表,只是转发表由路由表更新得到。
2025-12-03 16:55:21
1393
原创 【协议】DHCP
DHCP(Dynamic Host Configuration Protocol)是一种网络协议,用于动态分配IP地址及其他配置参数,帮助主机自动接入网络,避免手动配置的复杂性。核心流程基于UDP,包括四个阶段:DISCOVER(客户端发现服务器)、OFFER(服务器提供配置)、REQUEST(客户端请求确认)、ACK(服务器确认分配)。证据显示,DHCP广泛应用于动态网络环境,但需注意安全风险,如DHCP欺骗攻击;研究建议结合DHCP Snooping等机制增强防护。
2025-12-03 14:34:16
791
原创 【协议】arp
ARP(Address Resolution Protocol,地址解析协议)是一种网络协议,用于在局域网(LAN)中将IP地址映射到MAC地址(硬件地址)。它确保设备能通过IP地址找到对应的物理地址,实现数据链路层通信。主要应用于IPv4网络,由RFC 826定义。关键点:核心功能:ARP通过广播请求和单播响应实现IP到MAC的动态解析,通常在同一子网内工作。潜在问题:ARP易受缓存污染(ARP poisoning)攻击,攻击者可伪造响应拦截流量;
2025-12-01 15:36:41
1292
原创 【协议】ICMP
ICMP是IP协议套件的辅助协议,主要用于网络设备间传递控制消息。例如,当数据包无法到达时,它发送错误报告;或通过ping工具测试连通性。Wireshark可捕获这些包,显示详细字段,帮助分析网络问题。更多详情见RFC 792(https://www.ietf.org/rfc/rfc792.txt)。
2025-12-01 14:02:18
954
原创 【协议】ipv4
IPv4(Internet Protocol version 4)数据包头是网络层协议的核心部分,用于数据包的路由、转发和重组。标准头部长度为 20 字节(不含选项),按 32 位(4 字节)一行排列。
2025-11-28 15:35:04
651
原创 分片与分段【MTU 和 MSS】
在 TCP/IP 协议栈中,分片(Fragmentation)和分段(Segmentation)是处理数据传输的关键机制,帮助适应不同网络链路的包大小限制。
2025-11-28 10:44:40
937
原创 网卡如何界定 数据帧
10M/100M:靠前导码 + SFD + 帧间隙定界千兆:每 8bit → 10bit,用剩下的码组做 /S/ /T/,开销 25%10G 及以上:每 64 字节才加 2bit,用 01/10 同步头区分数据和控制,开销仅 3%网卡就是靠这些“故意多发的比特”在物理层就把帧边界标记得清清楚楚,比任何长度字段都更早、更可靠地知道:“这里开始一帧!“这里结束!
2025-11-25 17:18:12
421
原创 如何编写【C++高性能服务器/程序】
本文主要探讨了,需要做好一个高性能服务器,需要从语言本身(C++), 编译器, 操作系统,硬件设备 考虑,贴合 进行编码开发,进而实现高性能服务器。
2024-04-18 14:59:44
1663
原创 std::nth_element函数 使用崩溃 访问越界 原因解释
C++ 使用 std::nth_element 函数 是崩溃,崩溃原因是访问越界,该文解释了具体照成这个崩溃的原因
2024-03-26 11:32:49
382
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅