自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

fpcc的专栏

于细微处见精神,从宏观里学态度。行之苟有恒,久久自芬芳。

  • 博客(934)
  • 资源 (21)
  • 问答 (1)
  • 收藏
  • 关注

原创 设计心得—轮询、事件和异步

本文探讨了软件设计中三种交互处理机制:轮询、事件和异步。轮询是主动周期性检查状态,适用于简单场景;事件是被动触发机制,适合人机交互和解耦设计;异步则强调并行处理,适合高并发场景。三者各有特点,在实际应用中往往需要混合使用。作者强调,设计者需根据需求复杂度、IO/CPU密集程度和资源限制等因素灵活选择机制,并注意细节处理如轮询频率、事件管理和异步实现方式。良好的设计需要在技术特性和实际需求间找到平衡点,通过迭代优化达到最佳效果。文章指出工程实践往往需要综合运用多种技术,而非非此即彼的选择。

2026-03-04 10:45:03 204

原创 c++编程实践—为什么需要weak_ptr

本文探讨了C++11引入的weak_ptr智能指针。weak_ptr是一种弱引用指针,不控制对象生命周期,需通过lock()方法判断对象是否存在后使用。其主要作用是解决shared_ptr的循环引用问题,防止内存泄漏。应用场景包括:1)破除shared_ptr循环引用;2)监控对象生命周期(如多线程、异步操作);3)安全设计策略;4)兼容提供weak_ptr的接口。weak_ptr应作为特定场景的解决方案,而非广泛使用,否则可能引入新问题。正确使用weak_ptr能提高内存管理安全性和资源利用效率。

2026-03-03 10:18:23 551

原创 跟我学C++中级篇—内存栅栏和内存序

本文分析了内存栅栏和内存序的区别与联系。内存栅栏是底层指令级机制,影响线程所有内存操作,而内存序是高级抽象,仅针对特定原子操作。二者目的相同,但内存序更灵活、可移植性更好,推荐优先使用。文章通过示例展示了acquire-release栅栏的应用场景,强调它们必须成对使用才能保证同步效果。最后指出,理解软硬件各层次的抽象模型对技术本质的把握至关重要。

2026-03-02 10:33:15 509

原创 并行编程实战——CUDA编程的稀疏矩阵处理

本文介绍了稀疏矩阵的概念及其在CUDA中的高效处理方法。稀疏矩阵指大部分元素为零的矩阵,常用压缩存储格式(如CSR/CSC)节省空间。文章重点分析了稀疏矩阵向量乘法(SpMV)在CUDA中的实现,通过Belloch算法优化并行计算,利用warp级别的并行处理和归约操作提升性能。示例代码展示了10000×10000稀疏矩阵的GPU实现,强调了避免bank conflict等优化技巧。稀疏矩阵处理是AI、科学计算等领域的基础,深入理解其原理对开发高性能应用至关重要。

2026-03-01 09:41:55 385

原创 AI应用—Agent、Agent Skills、MCP和Workflow及Lanchain分析

本文解析了AI领域常见术语Agent、MCP、Skills、LangChain和Workflow的概念及相互关系。Agent作为用户与大模型的中介,负责任务调度和结果反馈;MCP是标准化知识获取的协议;Skills则是提升大模型效率的预制工具集。文章指出这些技术本质上都是为了降低AI使用门槛,通过解耦固定流程与动态计算来优化资源消耗。从用户视角看,Agent屏蔽了大模型的复杂性;从开发者角度看,LangChain和Workflow提供了不同抽象层级的开发方式。最终这些技术共同推动AI普及,实现成本分摊和效率

2026-02-28 10:12:35 546

原创 跟我学C++中级篇—标准库中的CAS接口分析

本文探讨了无锁编程中的CAS(比较交换)操作,重点分析了C++标准库中的compare_exchange_strong和compare_exchange_weak两种实现方式。文章指出强比较交换严格但性能稍差,弱比较交换可能出现伪失败但性能更好,并解释了参数expected和desired的区别。在不同硬件平台(如X86和ARM)上,CAS的实现存在差异,X86平台采用CMPXCHG指令保证原子性,而ARM等平台可能出现伪失败。文章还讨论了伪失败的原因(硬件架构、缓存一致性等)、ABA问题和活锁现象。最后通

2026-02-27 08:07:51 1113

原创 设计心得—隔离变化的实现方法之适配器

本文探讨了适配器设计模式的实践应用。适配器作为连接不同模块的"胶水",通过抽象层解决接口不兼容问题,典型应用场景包括数据库接口、日志框架等。文章提出适配器设计的四个原则:单一职责、简单性、依赖注入和适度扩展性,并通过数据库适配器代码示例说明实现机制。适配器虽能提高系统灵活性,但需权衡其代价,设计者应根据实际需求谨慎使用,在扩展性与复杂性之间找到平衡点。适配器如同社会中介,并非所有场景都需要,关键在于对整体需求的准确把握。

2026-02-26 10:57:58 358

原创 c++编程实践—利用CMake进行版本控制

本文探讨了软件开发中的版本管理机制。首先介绍了版本号的三种管理方式:自定义、行业定义及国家标准,分析了各自的适用场景。其次阐述了软件发布的三种形式:持续交付、固定时间交付和按需发布。重点讲解了在C++项目中使用CMake进行版本控制的三种方法:直接指定版本号、通过版本文件读取以及配置文件自动生成,并提供了具体实现示例。文章指出CMake在版本管理方面功能强大,可根据不同需求灵活配置,为开发者提供了高效的版本控制解决方案。

2026-02-25 12:02:35 339

原创 计算机原理—认识和学习线程

本文从多维度探讨了线程的本质与意义。首先通过类比认知过程,强调理解线程需从表象到本质;随后从用户、操作系统和硬件三个视角分析线程的构成要素,包括栈空间、控制结构及硬件支持等;进而指出线程产生的根本原因是资源不足与技术发展的需求;最后阐明线程作为标准执行单元的意义,为软件开发提供了统一的协作基础。全文揭示了线程既是技术演进的产物,也是工业化协作的标准体现,理解其本质有助于开发者更好地运用这一基础概念。

2026-02-24 11:05:27 462

原创 并行编程实战——CUDA编程的其它Warp函数

本文介绍了CUDA中线程束(Warp)的三种高级函数:Warp Reduce、Warp Match和Warp Matrix。Warp Reduce用于线程束内的数据聚合运算,如求和、极值等;Warp Match实现线程间的值匹配查找;Warp Matrix则利用Tensor Core进行小规模矩阵运算加速。文章详细说明了这些函数的功能、应用场景和接口形式,特别指出后两者需要特定GPU架构支持。同时提及了活动掩码函数__activemask()的使用注意事项,以及NVIDIA最新文档中对这些接口的更新建议。通

2026-02-23 10:06:28 634

原创 并行编程实战——CUDA编程的Warp Vote

本文介绍了CUDA中的束内原语(Warp-level Primitives),重点分析了Warp Vote功能。Warp Vote提供了三种函数接口:__any_sync(类似逻辑OR)、__all_sync(类似逻辑AND)和__ballot_sync(返回32位谓词结果),用于在Warp内对线程的布尔条件进行归约操作。通过一个例程演示了这些函数的使用方法和输出结果,展示了如何利用这些原语进行并行计算。文章指出这些束内原语在并行归约和流压缩等算法中具有广泛应用价值,并强调在实际开发中要合理选择同步版本接口

2026-02-22 09:23:55 291

原创 并行编程实战——CUDA编程的Warp Shuffle

本文介绍了CUDA中的线程间数据交互机制,重点分析了Warp Shuffle技术。Warp Shuffle允许同一线程束内的线程直接访问彼此的寄存器值,相比共享内存具有更低延迟和更高效率。文章详细讲解了四种Warp Shuffle函数(__shfl_sync、__shfl_up_sync、__shfl_down_sync和__shfl_xor_sync)的使用方法、参数说明及应用场景,并通过代码示例展示了这些函数在广播、前缀求和、归约等算法中的具体应用。这些函数通过寄存器操作替代共享内存访问,显著提升了CU

2026-02-21 11:28:46 618

原创 并行编程实战——CUDA编程的技术路线推荐

摘要:技术学习需理论与实践结合,CUDA技术学习应从宏观把握其应用场景与原理,再选择合适切入点。学习路线包括掌握编程语言、数学基础、并行编程等基础知识,深入CUDA框架、库应用、代码优化,以及分布式开发。最终需形成并行编程思想,整合软硬件知识。并行编程是复杂系统工程,需要持续学习与实践才能掌握。(149字)

2026-02-20 08:53:09 650

原创 并行编程实战——CUDA编程的Enhancing Memory Allocation

本文探讨了CUDA编程中的内存优化策略。首先分析了影响性能的关键限制条件,指出内存管理是首要优化方向。文章详细介绍了三层优化方法:主机端内存锁定技术、GPU内存池化与统一内存应用、以及CDMM等新技术。重点阐述了五种具体优化技术:内存池、零拷贝、内存预取、虚拟内存管理和合并应用。通过例程展示了虚拟内存管理的具体实现,包括内存分配、地址映射和访问权限设置等操作。文章强调内存优化是一个持续演进的过程,需要结合硬件发展不断调整策略,以提高GPU显存利用率和整体性能。

2026-02-19 16:23:43 799

原创 并行编程实战——CUDA编程的内存建议

本文介绍了CUDA统一内存中的内存建议(memory advise)优化技术。该技术通过cudaMemAdvise函数向CUDA运行时提供内存访问模式提示,包括只读建议、首选位置建议和访问设备建议三种类型,帮助CUDA做出更优的数据迁移策略。内存建议适用于多GPU协同、CPU-GPU协同处理等场景,但其效果与硬件平台密切相关,需要结合实际情况评估使用。文章还提供了一个示例代码展示如何使用内存建议优化内存访问,并强调该技术需与内存预取等其他优化手段协同使用。这项技术在大模型训练等AI应用中具有重要价值。

2026-02-18 19:12:06 575

原创 AI和大模型之一介绍

**摘要:**人工智能(AI)技术从机器学习发展到深度学习,特别是大语言模型(LLM)的出现推动了AI的普及。AI模型分为机器学习、深度学习和大模型三类,其中LLM基于Transformer架构,擅长处理自然语言。常见的大模型包括GPT、Claude、Gemini和LLaMA等。AI应用广泛,尤其在AIGC(人工智能生成内容)领域,涵盖文本、图片、音频和视频生成。智能体(Agent)进一步简化了AI应用。AI已成为未来技术革命的关键,推动各行业创新发展。

2026-02-17 21:17:02 553

原创 并行编程实战——CUDA编程的Tile

摘要:2025年12月发布的CUDA13.1带来20年来最大更新,重点引入基于数据块的Tile编程模型。该模型将编程单元从线程转为数据块,通过编译器自动处理任务调度,降低开发者对硬件的认知门槛,提升算法开发效率。更新还包括精细资源控制、多进程服务增强、数学库升级等技术改进。Tile模型解决了传统开发中线程绑定、内存处理等复杂问题,同时提升代码可移植性。这一变革反映了NVIDIA应对AI发展趋势、保持技术领先的战略布局,为开发者提供了更高效的编程范式。

2026-02-16 09:22:19 963

原创 并行编程实战—CUDA warp的分歧效应

本文分析了CUDA编程中的warp分歧现象及其影响。warp作为GPU调度的最小单位(32线程),当线程执行不同分支时会产生分歧效应,导致性能下降。分歧的原理是GPU将不同分支串行执行,挂起不符合条件的线程,造成吞吐量和资源利用率降低。文章提出了六种处理方法:判断性能影响、保持分支一致性、减少分歧代码量、使用编程技巧、优化数据访问模式等,并通过例程对比展示了分歧与非分歧代码的性能差异。最后指出warp分歧本质是并行转串行导致的资源利用率下降,开发者应重视优化分歧效应。

2026-02-15 09:30:54 533

原创 并行编程实战—CUDA编程的占用率

本文介绍了GPU和CUDA占用率的概念及其优化方法。GPU占用率对普通用户影响较小,但对开发人员处理并行计算任务至关重要。CUDA占用率指流多处理器上活跃线程束与最大线程束的比值,影响GPU利用率。文章详细讲解了CUDA占用率计算器的使用方法,以及通过__launch_bound__限定符和--maxrregcount参数调整占用率的技巧。最后强调开发者应善用工具监控和优化程序性能,提高计算效率。

2026-02-14 09:36:40 606

原创 并行编程实战——CUDA编程前缀和算法分析

本文介绍了两种CUDA并行计算中的前缀和算法:Hillis-Steele算法和Blelloch算法。Hillis-Steele算法是inclusive scan算法,计算时包含当前元素;Blelloch算法是exclusive scan算法,计算时不包含当前元素。文章详细说明了两种算法的实现原理和并行计算过程,并提供了代码示例。前缀和算法在CUDA并行计算中具有重要作用,广泛应用于排序、流压缩等场景。

2026-02-13 08:59:57 583

原创 并行编程实战——CUDA编程的并行前缀和

本文介绍了前缀和(Prefix Sum)算法的基本概念及其在并行计算中的应用。前缀和分为包含扫描(inclusive scan)和排除扫描(exclusive scan)两种形式,分别适用于不同场景。针对大规模数据的高效计算,文章重点分析了两种并行算法:Hillis-Steele算法(适合中小数据量)和Belloch算法(适合大数据量),并讨论了它们的复杂度、适用场景及混合应用的可能性。最后通过CUDA代码示例展示了Hillis-Steele算法的实现,验证了其正确性。文章指出GPU并行计算在现代AI和大数

2026-02-12 09:50:05 503 2

原创 跟我学C++中级篇——Concepts的循环依赖

本文探讨了C++20概念(Concepts)中可能出现的循环依赖问题。文章指出,循环依赖在复杂模板编程中可能出现,表现为多个概念间的相互约束,类似于数学定理间的循环证明。通过示例代码展示了概念A依赖B、B又依赖A的典型循环场景。为解决这一问题,提出了三种设计方法:高层抽象、减少互相约束、分解复杂概念;以及两种编程技巧:使用前向声明和延迟加载约束检查。最后强调良好的设计思想是避免概念循环依赖的关键,编程技巧只是辅助手段。全文为处理C++概念循环依赖提供了实用指导。

2026-02-12 09:45:39 506

原创 计算机原理—内存栅栏深入分析

本文系统介绍了内存栅栏的概念、背景、底层机制及应用。内存栅栏作为一种低级同步原语,通过建立内存序约束来保证多线程环境下数据操作的顺序性和可见性。文章分析了编译器优化、CPU流水线及多核架构导致的内存乱序问题,指出内存栅栏通过硬件指令和编译器约束解决这些问题。不同平台(如X86和ARM)的内存模型差异导致栅栏实现机制不同。文章还列举了常见使用误区,如栅栏位置错误和配对不当,并通过双检查锁案例展示了内存栅栏的实际应用。最后强调底层技术理解对开发者正确使用同步机制的重要性。

2026-02-11 07:40:09 772 2

原创 模板编程—模板的编译

本文深入分析了模板编译的核心机制与关键技术。首先对比了模板编译与普通代码编译的异同,重点阐述了模板特有的两阶段查找机制(Two-Phase Lookup)及其对依赖名称的处理方式。其次详细解读了CTAD(类模板参数推导)和ADL(参数依赖查找)两项关键技术在实际开发中的应用场景和配合方式。通过具体代码示例,展示了如何结合使用这些技术来解决模板开发中的典型问题。文章强调理解模板编译原理对提升开发能力的重要性,指出虽然编译问题复杂且小众,但掌握其底层机制能帮助开发者更好地进行模板设计与优化。

2026-02-10 11:19:12 402 2

原创 设计心得—如何使用多线程开发

多线程开发的核心目标是提升性能、资源利用率和用户体验,同时解耦复杂任务。设计需考虑并发模型选择、任务拆分、线程生命周期管理和通信控制,避免死锁等问题。虽然多线程能充分利用CPU资源,但线程创建和切换成本较高,需权衡效率。开发者应结合具体场景(如IO/CPU密集型任务)和平台特性,合理使用线程库和性能工具,避免过度设计。多线程开发需平衡复杂度与收益,才能实现高效稳定的并发程序。

2026-02-09 10:41:52 570

原创 并行编程实战——CUDA编程的Parallel Task类型

本文介绍了CUDA并行编程中的七种核心操作范式:Map(一对一计算)、Gather(非连续数据收集)、Scatter(数据分散写入)、Transpose(矩阵转置)、Stencil(局部模板计算)、Reduce(数据归约)和Scan(前缀和计算)。这些模式通过不同的线程-数据映射方式解决各类并行计算问题,适用于不同场景:Map适合连续内存访问,Gather用于数据收集,Scatter需原子操作避免冲突,Stencil适合卷积运算,Reduce采用分治策略,Scan处理序列依赖计算。文中还提供了各模式的CUD

2026-02-08 09:36:15 613 1

原创 并行编程实战—验证cuDNN是否安装成功

摘要:本文探讨了cuDNN安装验证中的版本显示问题。PyTorch框架内置的cuDNN版本(显示为91002)与手动安装的8.9.7.29版本不一致,这是由于PyTorch预编译了优化库。通过C++程序直接调用cuDNN接口验证,正确显示本地安装版本为8.9.0。文章指出PyTorch的版本封装可避免兼容性问题,但建议通过原生CUDA接口进行环境验证,并提示TensorFlow 2.11+在Windows平台不再支持GPU加速。最终强调深度学习框架版本管理的复杂性,需根据应用场景选择合适的验证方式。

2026-02-07 09:49:31 527 2

原创 设计心得—单次调用的控制

本文探讨了C++中单次调用机制的概念与应用。单次调用不仅用于生成单实例,也可应用于多实例场景,其核心价值在于避免副作用并确保唯一性调用。文章分析了单次调用的必要性,包括提高效率、线程安全、防止重复初始化等问题,并介绍了四种实现方法:std::call_once、全局显式调用、局部静态变量和同步操作。通过代码示例展示了具体实现方式,强调基础技术灵活组合应用的重要性,指出不同场景需要选择最适合的实现机制。

2026-02-06 11:39:15 274

原创 模板编程——std::is_pointer的分析

本文分析了C++标准库中的std::is_pointer元编程接口,指出其只能检查最外层指针类型(包括void指针但不包括成员指针)。通过示例展示了正确用法和常见误用情况,如处理多级指针和成员指针时的潜在问题。针对多级指针检测,提出了使用std::remove_pointer递归判断的解决方案。文章强调使用标准库接口时必须严格遵循说明文档,建议开发者通过测试验证确保代码健壮性。这些注意事项对提高元编程代码质量具有重要意义。

2026-02-05 13:06:06 387 1

原创 模板编程—C++不支持模板分离编译分析

摘要:C++模板编译具有特殊性,不同于普通代码的编译过程。由于模板采用延迟加载机制,只有在实例化时才会生成具体代码,这导致模板不支持分离编译(声明在头文件而实现在cpp文件)。实验表明,当模板函数未被调用时不会生成对应代码,从而引发链接错误。因此模板代码通常需要完整定义在头文件中,以确保编译器在需要时能正确实例化模板。这种特性也解释了为何模板相关问题常在链接阶段显现。

2026-02-05 07:46:53 942

原创 跟我学C++中级篇—静态变量的生命周期控制

本文探讨了C++中变量生命周期管理的关键问题及解决方案。首先阐述了四种生命周期类型:自动存储期(栈对象)、动态存储期(堆对象)、静态/全局存储期以及线程局部存储期。重点分析了静态变量和全局变量的生命周期问题,指出跨编译单元时初始化/析构顺序不确定可能导致的崩溃风险,如SIOF和二次释放等问题。针对这些问题,提出了四种实用解决方案:集中管理全局变量、使用线程安全的局部静态变量、只创建不销毁的静态变量策略,以及引入智能指针管理静态变量。文章强调生命周期管理对代码健壮性的重要性,特别是对悬垂指针等问题的预防,建议

2026-02-04 10:42:40 577 1

原创 跟我学C++中级篇—线程局部存储的底层分析

本文探讨了线程局部存储(TLS)在多线程编程中的应用与实现。文章首先指出线程间数据共享的常见问题,介绍了Windows和Posix平台提供的TLS机制,以及C++11引入的thread_local关键字。随后详细分析了TLS的实现原理,包括Windows平台的静态/动态TLS实现方式,Linux平台的ELF格式支持,以及C++标准库对系统TLS机制的封装。文章还通过代码示例展示了thread_local的实际应用,并比较了静态TLS和动态TLS的特点。最后指出,TLS技术是逐步发展完善的,为多线程编程提供了

2026-02-03 12:44:45 567

原创 设计心得——API和ABI以及ABI的兼容性

本文探讨了C++开发中动态库升级引发的ABI(应用程序二进制接口)兼容性问题。文章首先分析了工程实践中动态库替换导致程序崩溃的现象,指出ABI兼容是实现热更新的关键。随后详细对比了API与ABI的区别,阐述了ABI包含的指令集、数据类型、函数调用约定等核心要素。通过具体代码示例,说明了类内存布局、虚函数、参数传递等编程方式对ABI的影响,并总结了位域、Pimpl等保持ABI兼容的实用技术。最后指出ABI问题在C++等底层语言中尤为突出,而高级语言通过虚拟机环境规避了这类问题。文章为C++开发者处理动态库兼容

2026-02-02 12:44:28 657

原创 并行编程实战——CUDA环境的安装之高版本更新

本文记录了在Windows10 22H2系统下搭建CUDA12.6开发环境的完整过程。作者经历了显卡驱动升级失败、系统崩溃等意外后,最终成功安装了CUDA12.6、cuDNN8.7.9.29和PyTorch2.10.0。重点解决了CUDA安装时Visual Studio集成组件缺失的问题,并详细介绍了cuDNN的安装方法及验证流程。通过创建Python虚拟环境,使用科学上网方式成功安装GPU版PyTorch,并通过测试脚本验证了CUDA和cuDNN的正确配置。文章还提及了旧CUDA项目的兼容性问题,为开发者

2026-02-01 10:01:57 667

原创 并行编程实战——CUDA编程的精度操作

本文介绍了CUDA编程中的精度操作及其应用。主要内容包括:1)CUDA支持的三种精度类型(单精度FP32、双精度FP64和半精度FP16)及其特点;2)通过编译器选项、预处理指令和内置函数控制精度的方法;3)精度转换的隐式和显式方式及其注意事项;4)提供了不同精度计算的核心函数示例,包括高精度计算、快速计算、半精度计算和混合精度计算。文章强调在精度转换中需注意数据损失和溢出风险,建议开发者合理选择精度类型以平衡计算效率和准确性。

2026-01-31 10:27:28 621

原创 跟我学C++中级篇——Lambda表达式的处理

本文分析了C++中Lambda表达式的本质及其编译实现机制。Lambda表达式可分为无捕获和有捕获两种形式,前者可视为普通函数,后者则生成闭包对象。编译器会将Lambda转换为匿名类,将捕获变量存储为成员,并将函数体转换为operator()方法。文中详细介绍了Lambda Lifting(提升为独立函数)和Lambda Dropping(内联展开)两种优化技术,并通过具体代码示例展示了编译器对Lambda表达式的转换过程,包括捕获变量的处理方式。最终指出Lambda表达式本质上是语法糖,编译器会将其转换为

2026-01-25 12:02:55 783 1

原创 并行编程实战——CUDA编程的MPI库分析说明

本文介绍了CUDA-aware MPI技术及其在GPU集群中的应用。CUDA-aware MPI通过直接操作GPU内存指针,利用GPU Direct RDMA等技术实现节点间高效通信,避免了传统MPI中主机与设备内存间的数据拷贝。文章分析了其核心技术(GPU Direct、统一虚拟寻址、IPC支持)及优势(提升带宽、降低延迟),并对比了传统方式与CUDA-aware MPI的代码实现差异。虽然该技术在AI训练、科学计算等大规模GPU集群场景中优势明显,但也存在硬件要求高、开发复杂等限制。最后强调实践的重要性

2026-01-24 10:16:48 399 1

原创 设计心得——隔离隐藏的初步实践

本文探讨了软件设计中隔离隐藏细节的重要性及实现方法。作者指出过度暴露实现细节会带来风险,应通过接口最小化和信息屏蔽来确保设计稳定性。文章详细分析了四种隔离方法:基础隔离(适用于小型项目)、接口隔离(包括抽象接口和完全隔离)、设计模式隔离(工厂/单例、桥接/策略等)以及Pimpl技术。通过C++代码示例展示了各种方法的实现方式,并对比了它们的优缺点:Pimpl能减少编译依赖但增加间接访问开销,接口隔离提供多态性但设计复杂度高。最后强调应根据项目规模、ABI兼容需求等因素选择合适的隔离策略组合,在大型项目中往往

2026-01-23 07:51:01 1266

原创 计算机原理——线程和上下文

本文通过类比游戏存档和人物属性,生动解释了线程与上下文切换的关系。文章首先区分进程和线程的概念,指出线程共享进程资源但拥有独立栈空间等特性。然后详细说明上下文包含的硬件、内核和用户空间信息,类比为保存线程运行状态的"存档"。核心观点是:上下文切换源于CPU资源不足的调度需求,本质是保存当前线程状态并恢复目标线程状态的过程。最后简要概述了上下文切换的6个步骤,并附上内核调度代码片段。全文通过生活化类比,帮助读者理解操作系统调度机制的本质。

2026-01-22 11:29:20 546

原创 C++20中的预处理器宏——__VA_OPT__

本文介绍了预处理器宏的概念及其应用,重点分析了C++20新增的__VA_OPT__宏。文章首先解释了预处理器宏的基本功能,包括宏展开、条件编译等。然后对比了__VA_ARGS__和__VA_OPT__的使用方法,指出后者能更好地处理空参数情况。通过代码示例展示了__VA_OPT__在元组创建等场景下的应用优势。最后指出虽然宏的使用场景在减少,但在预处理阶段仍不可替代,C++20引入__VA_OPT__是为了解决历史遗留问题。全文阐述了宏处理的发展历程和技术细节,说明了标准演进的必要性。

2026-01-21 11:09:02 390 2

masstree算法论文

目前的底层的分布式数据库如ROCKSDB等都使用的LSM的算法,本文使用了masstree这种算法来优化其处理。

2018-11-17

Sql批量操作数据

在SQLSERVER的多条数据操作时,使用SQLBULKCOPY等几种方式的对比,这篇文档就是整理了这些使用的方法。

2018-10-05

朗新WEBSERVER接口(南网和天津电网)

适用于朗新目前的所有接口,平台语言C#,主要是对电力系统SG186的跨平台调用。也适于于同样的WEBSERVER工程跨平台使用。使用说明书已打在压缩包里。

2009-03-16

IOTEX白皮书

物联网和区块链的结合,实现了链中链和跨链的通信,通过特有零知识证明来解决用户隐私问题。

2018-09-30

JAVA并发编程设计原则与模式

一本比较老的书,讲得多线程和并发技术,是一个入门的比较浅显的书籍。

2018-10-01

虹膜开源的算法

本文是国外的一款开源的虹膜识别框架的介绍,它的源码是可以直接使用的,但是需要优化。

2018-11-17

电能质量闪变的测量

电能质量是电力行业一个重要的部分,本论文从实际出发,论证了闪变测量的方法。

2018-10-05

大数阶乘算法的一个例子

小数的阶乘比较好做,但是阶乘的数量变化非常快,很快会溢出,这里采用一种变通的方法,可以实现相当大的数的阶乘,如果在这个基础上进一步扩展,能进行更大的阶乘算法。

2018-10-06

bancor协议白皮书

bancor协议是目前区块链研究的一个重要方向,跨链不同的TOKEN之间的兑换一直是一个问题,这里给出一个解决的方案。

2018-09-29

steamr白皮书

steamr是一个用来做数据去中心化的网络和市场相关的区块链项目,主要提供去中心化的云服务。

2018-10-11

安卓编译JAR包和SO

这个是用ECLIPSE编译JAR包和SO的一个教学录像,非常适合对c++不熟悉的人编译使用。

2018-10-01

linux设备驱动开发

本书从浅到深介绍了LINUX操作系统上的驱动开发的过程,值得推荐。

2018-11-17

代码管理核心技术及实践

代码管理是开发过程一个重要的环节,好的代码管理可以为团队的开发提供安全的保护和合作,本书就是讲述在不同环境中如何使用主流的代码管理软件和方式。

2018-09-30

DERP白皮书

DREP区块的白皮书,是一个新的区块链的技术,如果大家对这个感兴趣,可以下来看看。

2018-09-29

mixin白皮书

mixin是一个闪电交易快速的点点对的数字交道项目,它拥有非常好的技术栈。

2018-10-11

阿希链白皮书

阿希链是一个用javascript写的侧链,主要用来完成多链间的通信,有一定的特色,可以借鉴。

2018-10-11

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

TA关注的人

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