自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(82)
  • 收藏
  • 关注

原创 配置(11):vscode中使用bookmarks扩展

本文介绍了在VSCode中使用Bookmarks插件的完整流程:首先安装插件,然后在设置中启用bookmarks.json配置文件。重点说明了两种添加书签的方法:一是通过快捷键或右键菜单实时添加(自动更新配置文件),二是直接编辑bookmarks.json文件(需重启生效)。配置文件包含文件路径、行号、列号和书签标题等关键信息。两种方法各有利弊,用户可根据需求选择使用。

2025-12-25 13:43:23 389

原创 配置(10):通过源码安装redis

本文详细介绍了Redis源码安装及使用指南:1)从安装编译依赖、下载源码到编译安装全过程;2)提供Redis关键配置说明(持久化、日志等)及systemd服务配置方法;3)演示基础操作命令;4)重点讲解C语言通过hiredis库连接Redis的完整流程,包括代码示例和编译方法;5)最后给出完整的卸载指南。文档涵盖Redis服务器部署、配置优化、客户端开发全流程,适合开发者在Linux环境下快速搭建和使用Redis服务。

2025-12-23 18:42:39 733

原创 Linux C/C++ 学习日记(59):手写死锁监测的组件

本文介绍了多线程环境下的死锁检测机制。死锁是指多个线程因循环等待资源而永久阻塞的状态。作者提出通过构建线程间的有向等待图来检测死锁:当线程请求被占用的锁时建立等待边,获取锁后删除该边,并定期使用拓扑排序检测图中是否存在环。文中给出了C++实现,包含维护互斥锁-线程映射表、构建等待图及检测循环的完整代码。该方案能有效识别典型的循环等待死锁,并通过独立监测线程实时预警。测试案例模拟了四个线程的循环等待场景,验证了检测功能的有效性。

2025-12-21 17:23:49 324

原创 Linux C/C++ 学习日记(58):手写检测内存泄露的组件

本文介绍两种检测内存泄漏的方法:1)宏定义封装法,通过重定义malloc/free记录分配位置信息到文件;2)hook拦截法,使用__builtin_return_address获取调用栈地址。两种方法都会在内存分配时创建文件,释放时删除文件,通过剩余文件定位泄漏点。宏方法简单直接但需修改代码,hook方法更灵活但需处理递归调用问题。文中详细说明了ASLR地址随机化对hook方法的影响及解决方案,并提供了完整的实现代码,包含热更新、线程安全等优化。建议优先使用宏方法,hook方法需编译时加-g参数以便add

2025-12-21 15:46:20 733

原创 Linux C/C++ 学习日记(57):定时器

本文介绍了定时器的实现原理与代码示例。定时器是管理大量延时任务的模块,通过高效的数据结构(如红黑树、最小堆)组织任务,并使用IO多路复用(如epoll_wait)触发机制。文中采用红黑树存储定时任务,利用steady_clock确保时间单调性,通过emplace_hint优化插入效率。代码实现了添加/删除定时任务、检测触发和执行回调等功能,最终演示了结合epoll处理定时任务的完整流程。该方案兼顾了IO事件和定时任务处理,避免了sleep等低效方法。

2025-12-21 00:03:36 685

原创 Linux C/C++ 学习日记(56):用户态网络缓存区

用户态网络缓存区实现方案比较 用户态网络缓存区(发送/接收)用于暂存不完整数据包,支持批量处理。常见实现方案有:1)数组方案存在频繁数据挪移、伸缩性差问题;2)环形队列(ringbuffer)虽优化性能但仍有内存浪费;3)链式缓存区(chainbuffer)通过链表管理离散内存块,具有动态扩容无拷贝、规避大内存分配风险的优势,尤其适合网络编程场景。Linux系统可通过writev/readv合并操作提升环形队列性能。链式缓存区通过小块内存拼接实现高效内存管理,是处理动态长度数据的理想方案。

2025-12-20 21:18:50 469

原创 Linux C/C++ 学习日记(55):原子操作(四):实现无锁队列

本文介绍了无锁队列的设计与实现。首先对比了有锁队列和无锁队列的区别,指出无锁队列通过原子操作实现线程安全,避免了锁带来的性能瓶颈和死锁风险。其次区分了无锁(lock-free)和无等待(wait-free)两种并发级别,并介绍了SPSC、MPSC等不同生产者消费者模式的无锁队列实现。重点分析了SPSC环形缓冲区的设计原理,包括空满判断、读写操作等核心逻辑,并提供了基于原子操作的C++实现代码。同时还讨论了MPSC队列的单链表实现方式,展示了带头节点的队列操作方法。文章通过具体代码示例展示了无锁队列在高并发场

2025-12-20 18:58:30 204

原创 Linux C/C++ 学习日记(54):原子操作(三):精简介绍:CPU缓存、MESI机制、原子变量、volatile、伪共享

本文深入探讨了CPU缓存机制与多线程编程中的核心概念。首先解析了CPU缓存的MESI协议(Modified/Exclusive/Shared/Invalid),解释了缓存行状态转换机制及其对数据可见性的影响。然后详细阐述了多线程编程的三大特性:可见性、顺序性和原子性,指出MESI协议本身不保证即时可见性的原因。接着系统介绍了6种内存序(relaxed/acquire/release/acq_rel/seq_cst)的特性及适用场景,强调应根据具体需求选择合适的内存序。最后通过伪共享案例展示了缓存行对齐的性能

2025-12-20 16:45:21 685

原创 Linux C/C++ 学习日记(53):原子操作(二):实现shared_ptr

本文实现了一个线程安全的shared_ptr智能指针,核心要点包括:1. 采用原子操作管理引用计数,针对不同操作选择合适的内存序:fetch_add使用relaxed、fetch_sub使用acq_rel、use_count使用acquire;2. 实现完整构造函数和运算符(拷贝/移动构造、赋值运算符、解引用等);3. 通过多线程测试验证线程安全性,10个线程各执行1万次拷贝操作后引用计数保持正确;4. 与标准库shared_ptr相比,省略了删除器和弱引用支持,但保证了基础功能正确性。测试案例验证了引用计

2025-12-18 23:08:55 389

原创 Linux C/C++ 学习日记(52):原子操作(一):cpu缓存、可见性、顺序性、内存序、缓存一致性的介绍

本文系统阐述了CPU数据获取机制与多线程同步的核心原理。首先解析了CPU获取数据的层级流程:从L1→L2→L3缓存逐级查询,最终从主存加载。其次重点探讨了线程同步三大特性:原子性(不可中断的操作)、可见性(通过release/acquire内存序强制缓存同步)和顺序性(约束指令重排序)。然后深入分析了缓存一致性协议MESI的工作机制,说明其如何通过状态标记和总线广播保证多核缓存同步,并指出其与原子操作的本质区别。最后通过a++的反例验证了非原子操作的风险,强调原子变量需配合内存序才能确保实时同步。全文揭示了

2025-12-18 00:05:07 834

原创 Linux C/C++ 学习日记(51):内存池

本文摘要: 内存对齐与内存池实现要点 内存对齐核心: 分配指针必须对齐(硬件要求+标准强制) 访问指针需匹配数据类型粒度(x86非对齐性能差,ARM会崩溃) 缓存行对齐(32/64字节)可提升性能 内存池优势: 解决内存碎片问题 提升分配效率(用户态操作) 增强缓存局部性 实现方案: 等长内存池:固定块大小,通过链表管理空闲块 大小块混合池:区分小块(<4KB)和大块(≥4KB) 关键优化:指针地址对齐(MP_ALIGNMENT=32)、内存大小对齐 性能考量: 对齐到缓存行避免跨行读取 通过预分配减

2025-12-17 19:44:16 930

原创 Linux C/C++ 学习日记(50):连接池

本文介绍了数据库连接池的实现原理与C++代码实现。连接池通过维护固定数量的数据库连接,解决了资源复用和并发处理能力问题。文章详细阐述了同步/异步连接池的区别,并重点分析了异步连接池的组件设计:包括连接池管理类(MySQLConnPool)、连接项(MySQLConn)、工作线程(MySQLWorker)、请求项(SQLOperation)和回调机制(QueryCallback)。通过promise/future实现异步回调,工作线程从任务队列获取请求执行后将结果设置到promise,触发回调函数处理查询结果

2025-12-17 14:58:49 981

原创 Linux C/C++ 学习日记(49):线程池

本文总结了线程池的核心概念与实现要点:线程池是一种预先创建可复用线程的资源管理机制,通过维护线程集合来避免频繁创建/销毁线程的开销。其核心解决异步执行耗时任务和充分利用多核的问题。实现采用生产者-消费者模型,关键设计包括队列结构(单/双队列、优先级队列等)和线程数量管理(CPU密集型/IO密集型场景下的线程数计算)。代码实现要点涉及互斥锁、条件变量等同步原语的使用,并对比了单队列和双队列设计的性能差异。文章还提供了固定线程池的C++实现示例,涵盖任务提交、线程工作循环和队列管理等核心功能。

2025-12-17 11:42:44 654

原创 C/C++内置库函数(6):C++中类什么时候使用静态变量

C++类中静态变量的核心使用场景包括:全局唯一注册表(如单例模式)、类级常量配置、全局状态统计、静态函数配套存储以及跨对象共享数据。静态变量具有类级别共享、全局生命周期和可被静态函数访问的特性。使用时需注意:非const静态变量必须在类外定义(C++17前),而静态函数仅需类内声明。关键注意事项包括线程安全、初始化顺序、内存泄漏和访问控制。静态变量适用于需要类级共享数据的场景,而非对象专属属性。

2025-12-11 20:22:17 1036

原创 C/C++内置库函数(5):值/引用传递、移动构造、以及常用的构造技巧

文章摘要:本文深入探讨C++引用传递和构造函数的核心机制。引用传递(左值/右值引用)的本质是对象别名绑定,不会创建新对象,因此不会触发构造函数。文章通过代码示例验证了引用传递与值传递的区别,并系统总结了七种企业级常用构造函数模板:包括移动构造、深拷贝构造、委托构造、完美转发构造等。特别强调了单例模式的构造设计原则,提供了饿汉式和懒汉式两种线程安全的单例实现方案。这些模板涵盖了资源管理、泛型编程、继承体系等典型场景,具有重要的工程实践价值。

2025-12-11 18:35:22 940

原创 C/C++内置库函数(4):c++左右值及引用的概念、move/forward的使用

本文深入解析C++中的左值/右值概念及std::move/std::forward的用法。左值有名字可寻址,右值分为纯右值和将亡值;std::move将左值强制转为右值引用以触发移动语义,但不实际移动数据;std::forward实现完美转发,保留参数的原始值类别。文章通过代码示例展示了移动语义的实现原理,并强调移动后源对象处于"有效但未定义"状态,可根据需求决定其具体状态。最后对比了左值引用与右值引用、std::move与std::forward的核心差异及应用场景。

2025-12-11 16:44:12 1200

原创 C/C++内置库函数(3):future、promise的用法

摘要:std::promise和std::future是C++异步编程的核心组件,构成生产者-消费者模型。promise作为生产者通过set_value/set_exception设置结果或异常,future作为消费者通过get()获取结果或wait_for()等待结果状态。两者遵循移动语义,且关键操作(set_value/get)仅能调用一次。典型应用场景包括线程间结果传递、异步IO等,通过三个示例演示了基本用法、非阻塞等待和异常处理机制,为手动控制异步任务提供了灵活解决方案。

2025-12-11 15:25:40 549

原创 C/C++内置库函数(2):智能指针

摘要:本文系统介绍了C++三种智能指针的核心特性与使用场景。std::unique_ptr实现独占所有权,不可拷贝仅可移动,适用于单一所有者场景;std::shared_ptr通过引用计数实现共享所有权,适用于多所有者共享资源;std::weak_ptr作为弱引用观察者,解决shared_ptr循环引用问题。文章详细对比了三者的定义方式、常用方法及最佳实践,强调make_unique/make_shared的安全优势,并指出常见错误用法(如重复接管裸指针、手动delete等)。最后总结了智能指针的选择策略和

2025-12-11 15:07:16 774

原创 项目(1):kv存储(二):纯内存操作同步 + ebpf

本文对eBPF和KV存储服务器进行了性能测试分析。eBPF测试显示:粘包情况下发送速率低于截取速率,无粘包时两者耗时相近。KV存储测试包含单主机全量/增量模式、主从同步模式,分别对红黑树、哈希表、跳表三种引擎进行读写删操作测试。测试方案包括引擎混合测试和单独测试,并在单主机全量模式下结合eBPF进行主从同步性能评估。测试数据涵盖了不同连接状态(有无从机连接)下的性能表现。

2025-12-08 15:38:43 154

原创 配置(9):在ubuntu上生成core文件

摘要:启用核心转储功能需执行ulimit -c unlimited解除大小限制,并通过cat /proc/sys/kernel/core_pattern检查生成路径。使用sysctl命令可修改核心文件路径(需root权限)。程序崩溃后,在当前目录查找core或core.<pid>文件。调试时用gdb ./kvstore core.20860载入核心文件,执行bt full获取完整的函数调用链和变量信息,定位错误点。注意编译时需加-g选项生成调试信息。

2025-11-22 19:52:40 351

原创 项目(1):kv存储(一):性能测试

摘要:KV存储服务器性能测试显示,单机模式(全量/增量持久化)QPS约6万;主从同步时主机QPS降至5万(虚拟机CPU资源限制),从机使用引擎副本同步时可稳定在5万。内存泄漏检测(valgrind)表明:主机存在288字节可能泄漏(线程TLS资源)和1.14MB可访问内存(框架全局资源),从机仅1.14MB可访问内存,均属良性未释放资源,核心业务无真实泄漏,服务器可长期稳定运行。(149字)

2025-11-20 15:20:48 951

原创 配置(8):通过源码安装jemalloc

一、下载并解压源码配置并编译./configure # 可添加选项,如 --enable-debug 启用调试makesudo make install # 安装到系统默认路径(如 /usr/local/lib)编译程序时链接:安装后,同样通过-ljemalloc链接(若安装到非默认路径,需用-L指定库路径,如。

2025-11-19 22:59:21 260

原创 配置(7):ubuntu查找进程,查找端口,然后终止

本文介绍了两种终止进程的方法:一是通过端口号查找并终止进程,先使用ss -tuln | grep 端口号查看端口状态,再用lsof -i:端口号获取占用进程PID,最后用kill -9 PID强制终止;二是通过程序名查找进程,使用ps aux | grep 程序名获取PID,先用kill PID优雅终止,若失败则用kill -9 PID强制杀死。

2025-11-19 00:59:25 232

原创 C/C++ 内置库函数(1):struct iovec的使用

定义在// 指向数据缓冲区的起始地址(要读/写的数据)// 缓冲区的大小(字节数)iov_base:指向一块内存缓冲区(如字符串、数组等),是实际要读取或写入的数据的地址。iov_len:表示iov_base指向的缓冲区的长度(单位:字节),即要操作的数据量。是实现高效分散 / 聚集 I/O 的关键结构,通过配合readvwritev。

2025-11-13 00:14:33 764

原创 Linux C/C++ 学习日记(48):dpdk(九):dpdk的应用场景及劣势

DPDK 实现 DDoS 防护的核心是用 “用户态硬件直连” 打破内核瓶颈,用 “批量处理 + 硬件卸载” 提升性能,用 “特征 + 统计” 实现精准检测。其价值在超大流量、小包密集的攻击场景中尤为突出,已成为运营商、云厂商等应对 T 级 DDoS 攻击的核心技术选型。转发的核心是 **“数据包的路径跳转”**,只要数据包从一个 “处理环节” 传递到另一个 “处理环节”,就属于转发。路由器将数据包从 “WAN 口” 转发到 “LAN 口”;防火墙将 “过滤后的合法包” 转发到 “内部服务器网卡”;

2025-11-07 16:52:06 776

原创 Linux C/C++ 学习日记(47):dpdk(八):UDP的pps测试:内核 VS dpdk

摘要:本文对比了DPDK和标准POSIX API在UDP发包性能上的差异。测试结果显示,DPDK发包速率达17.8万PPS,是标准Socket(7.2万PPS)的2.4倍。性能差异主要源于:1)DPDK绕过内核协议栈,消除上下文切换开销;2)采用零拷贝技术,避免用户态-内核态内存拷贝;3)支持批量发包优化;4)使用轮询替代中断模式。特别在小包场景下,DPDK优势更显著,因其性能不受内核交互开销影响。测试代码实现了两种发包方式,验证了DPDK在高吞吐网络应用中的明显优势。

2025-11-07 16:11:34 746

原创 配置(6):gitee如何远程上传文件

本文详细介绍了Gitee代码托管平台的使用流程:从注册账号、配置SSH密钥到创建远程仓库。重点讲解了本地项目上传Gitee的完整操作步骤:初始化Git仓库、添加文件、提交更改、关联远程仓库及推送代码。文中还对比了git add、commit和push的区别,并深入解析了Git中被跟踪文件的概念及其状态管理。最后针对文件重命名场景给出了正确操作建议。该指南适合Git初学者快速掌握代码托管的核心操作流程。

2025-11-06 01:08:00 1180

原创 Linux C/C++ 学习日记(46):io_uring(二):reactor 与proactor的性能测试对比

本文对比了Reactor和Proactor两种I/O模型的性能差异。测试结果显示,Proactor(基于io_uring)在处理不同数据包大小时QPS更高,特别是处理2KB数据时Proactor的QPS达到175,000,而Reactor(基于epoll)为148,000。文章包含完整的测试代码:epoll_tcp_server.c实现Reactor模式,uring_tcp_server.c实现Proactor模式,以及test_qps_tcpclient.c用于性能测试。测试维度包括连接建立时间、QPS和

2025-11-02 15:05:36 332

原创 Linux C/C++ 学习日记(45):io_uring(一):io_uring的底层原理

本文介绍了Linux异步I/O框架io_uring的核心原理与实践应用。io_uring通过共享内存环形队列实现高效异步I/O处理,减少了用户态和内核态的数据拷贝与切换开销。文章详细解析了其核心组件:提交队列(SQ)和完成队列(CQ)的工作原理,以及在内核异步处理和用户态事件循环中的交互流程。通过TCP回声服务器示例代码,展示了如何利用io_uring实现高并发网络服务,包括事件注册、批量处理等关键操作。与传统I/O模型相比,io_uring具有零拷贝、低延迟、高吞吐等优势,适用于高性能服务器场景。代码示例

2025-11-02 02:18:03 753

原创 配置(5):Nginx的卸载与安装

摘要:本文详细介绍在Ubuntu22.04中删除和安装Nginx的完整流程。第一部分提供两种删除方案:apt安装版的清除方法(包括卸载软件包和清理残留文件)和源码编译版的删除步骤(包括移除安装目录和环境变量)。第二部分详解源码编译安装Nginx的完整流程,涵盖依赖安装、源码下载、编译配置、安装启动等步骤,并提供了systemd服务配置方法。最后说明新增模块时的重新编译方法。本文特别强调了对不同安装方式的针对性处理,并提供了详细的命令参考和注意事项。

2025-11-01 21:34:56 619

原创 配置(4):VScode c/c++编译环境的配置:c_cpp_properties.json

摘要:c_cpp_properties.json是VSCode中C/C++扩展的核心配置文件,用于提供编译上下文环境,实现代码提示、语法检查等功能。该文件需要放置在.vscode文件夹下,主要配置项包括:includePath(头文件搜索路径)、compilerPath(编译器路径)、cStandard/cppStandard(语言标准)和intelliSenseMode(模拟模式)。配置文件不影响实际编译过程,仅作用于编辑器功能。"${workspaceFolder}/**"表示递归搜

2025-11-01 01:25:49 1033

原创 Linux C/C++ 学习日记(44):dpdk(七):用户态epoll的实现思路

本文探讨了epoll机制的核心实现:1)采用红黑树管理整集(高效查找、内存线性增长),链表动态扩展就绪集;2)通过协议栈回调函数在4种时机触发整集到就绪的转换;3)epoll_wait根据timeout参数采取不同策略:负数时阻塞等待,零时立即返回,正数时定时检查。文章从数据结构选择到事件触发机制,系统性地解析了epoll的高效实现原理。

2025-10-31 17:02:49 191

原创 Linux C/C++ 学习日记(43):dpdk(六):dpdk实现发包工具:UDP的发包,TCP的泛洪攻击

本文主要记录了网络发包测试和TCP泛洪攻击实验过程。首先介绍了在Windows和Ubuntu系统下查看网卡MAC地址的方法。随后详细说明了使用DPDK工具发送UDP数据包的参数配置,包括CPU核心、内存通道、源/目的IP和端口等设置,并给出了成功发送10个UDP包的示例命令。最后通过发送20万个SYN包模拟TCP泛洪攻击,观察到服务器能正确处理SYN+ACK重传和超时连接清理,验证了其具备抗洪机制。实验涉及IP配置、UDP发包和TCP攻击防御等网络技术。

2025-10-31 15:26:33 422

原创 Linux C/C++ 学习日记(42):dpdk(五):基于dpdk实现用户态的UDP收发数据、和TCP的三次握手及接收数据

文章摘要:本文实现了一个基于DPDK的网络协议栈基础功能,主要测试了UDP和TCP协议的收发包功能。测试结果表明,UDP收发包功能完整实现且测试成功;TCP三次握手过程正常完成,但存在TCP数据传输问题:当服务端收到客户端数据后仅回复空ACK包时能正常工作,而尝试回发数据时客户端无法收到PSH+ACK包,导致数据重传。文中提供了完整的C语言实现代码,包括网络设备初始化、数据包封装、MAC/IP/端口信息打印等功能,并通过详细的日志输出来调试网络通信过程。代码结构包含UDP/TCP数据包处理、状态机实现和序列

2025-10-31 10:30:14 243

原创 Linux C/C++ 学习日记(41):dpdk(四):基于dpdk编写的第一个程序

本文介绍了如何编写程序检测DPDK是否正常使用。首先创建ustack目录和.c文件,复制并修改Makefile指定编译ustack.c。代码示例通过rte_eal_init初始化DPDK环境,使用rte_eth_dev_count_avail检查可用网卡数量,成功运行后输出网卡数目和确认信息。最终通过编译执行验证DPDK正常初始化,系统检测到1个多队列网卡。该过程可用于基础DPDK环境验证。

2025-10-30 15:02:33 180

原创 Linux C/C++ 学习日记(39):dpdk(二):网络分层模型、网卡、driver的介绍

注:该文用于个人学习记录和知识交流,如有不足,欢迎指点。

2025-10-30 14:36:41 922

原创 Linux C/C++ 学习日记(40):dpdk(三):dpdk的原理

VFIO 和 UIO 是LInux内核提供的用户态 I/O 框架,用于让用户态程序(如 DPDK)直接访问硬件资源。VFIO 和 UIO 的核心作用之一,就是让用户态程序(比如 DPDK)能直接控制硬件的 DMA 功能(比如配置 DMA 传输的内存地址、启动 / 监控传输过程),而不用依赖内核驱动来中转。它们相当于 “权限中介”,把内核手里的 DMA 控制权,安全地开放给用户态程序,是用户态“绕过内核,直接操作硬件 DMA”的关键工具。对比维度VFIOUIO安全性。

2025-10-30 14:27:53 700

原创 Linux C/C++ 学习日记(38):dpdk(一):dpdk的环境配置

本文记录了在Ubuntu 16.04系统中配置DPDK的完整过程。主要内容包括:1)通过修改vmx文件配置多队列网卡;2)配置2M大页内存(hugepage);3)下载并编译DPDK 19.08.2版本;4)运行时环境配置,包括网卡绑定(UIO/VFIO方式)和KNI接口设置;5)补充配置环境变量和hugepage文件系统挂载;6)Windows端配置静态ARP以支持DPDK数据收发。文中特别指出每次虚拟机重启后需要重新配置DPDK环境,并提供了详细的命令行操作步骤。该配置适用于网络数据包处理场景,旨在提升

2025-10-30 00:55:01 621

原创 Linux C/C++ 学习日记(37):协程(六):总结

本文比较了同步与异步I/O操作机制,以及线程与协程的差异。在I/O方面,同步调用会阻塞线程或协程,而异步调用通过事件监听实现非阻塞切换。协程通过hook技术模仿线程的同步编程方式,但运行于单线程内,切换开销更小、内存占用更低(KB级vs线程MB级)。在高并发IO场景中,协程可实现"一fd一协程",效率优于线程;但对于CPU密集型任务,建议使用与核数匹配的线程数量以减少切换开销。协程的核心优势在于用户态轻量级切换,兼顾同步编程体验与异步性能。

2025-10-29 17:07:46 387

原创 配置(3):虚拟机配置多网卡,同时给网卡配置多队列

这篇文章介绍了在Ubuntu16.04虚拟机中配置多网卡和多队列网卡的具体步骤。主要内容包括:1)添加NAT模式网卡并配置IP分配规则;2)解决多队列网卡配置后网卡名称变化问题,通过udev规则基于MAC地址固定网卡名称;3)配置多队列网卡的具体方法。文章详细记录了操作过程中遇到的各种问题及解决方案,如网卡无IP、网卡名称变更等,并提供了完整的配置流程和命令示例。最后说明了如何验证多队列网卡配置成功,为虚拟机网络性能优化提供了实用指导。

2025-10-28 14:42:51 842

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除