Ajax Zhan's Blog
Welcome!This is Ajaxzhan.
坚信:品味优先于执行,价值驱动下创造、系统工程保安全
持续跟进AI前沿研究,持续思考技术、产品与思维。
坚信:品味优先于执行,价值驱动下创造、系统工程保安全
持续跟进AI前沿研究,持续思考技术、产品与思维。
Go语言GMP调度模型通过Goroutine(轻量级协程)、线程(M)与调度器(P)的协同,解决了传统并发中的全局锁竞争问题。P作为本地队列缓存协程,实现无锁访问;调度时优先本地队列,空则从全局获取或任务窃取,提升效率。针对协程饥饿问题,通过主动挂起(如channel等待)、系统调用完成触发重新调度;对不主动挂起的协程,采用抢占式调度——协作式利用方法调用时的morestack检查标记,信号式则通过GC发送信号触发线程调度,确保高并发下资源公平与高效执行。
Go语言协程是其高并发的核心,本质是复用线程、打包程序运行状态以节约调度开销,具有资源利用率高、快速调度、超高并发等优势。底层通过`g`结构体抽象协程,包含栈、运行现场(`gobuf`)、状态及ID等字段;线程则抽象为`m`结构体。早期Go采用单线程循环模型(0.x版本),通过`schedule`、`execute`、`gogo`等循环调度协程执行,多线程版本(1.0)需加锁解决全局队列竞争。但该模型存在协程顺序执行无法大规模并发、锁竞争影响效率等问题,后续被G-M-P调度模型优化。
内存对齐是提升Go程序运行效率的关键,通过优化内存布局提高访问效率并保证原子性。Go中基本数据类型的对齐系数与其长度一致,如int32为4。结构体对齐分内部与外部:内部需满足成员偏移量规则,并通过长度填充对齐系统字长;外部对齐系数取成员最大对齐系数。调整结构体成员顺序可减少内存填充,优化空间。空结构体单独出现不占内存,被包裹时地址跟随前变量,位于末尾时需补齐字长。掌握这些规则能帮助开发者写出更高效的Go代码。
本文深入剖析Go语言中的“空”概念及接口底层实现。接口值底层由`iface`(非空接口,含`tab`和`data`)和`eface`(空接口,含`_type`和`data`)构成,类型断言依赖`itab`记录的类型与方法信息。空结构体非`nil`,常用于节约内存(如Hashset的Value、channel信号);`nil`是六种类型(指针、channel等)的零值,且具有类型。空接口仅当`_type`和`data`均为空时才为`nil`。核心要点:`nil`有类型,空结构体非`nil`,接口`nil`需类型与数据同时为空。
Go语言原生map在并发读写时存在安全隐患,因扩容机制可能导致数据不一致,引发“concurrent map read and map write”错误。sync.Map通过双map结构(read与dirty)分离读写与追加操作:正常读写访问read map,避免锁竞争;新增操作则锁定dirty map,并通过misses计数触发dirty提升为read,优化性能。其设计解决了map并发问题,适用于写多读多但追加较少的场景,性能优于加锁map。
Go语言Map采用拉链法实现哈希表,底层通过hmap结构管理桶数组(buckets)及溢出桶。每个桶存储8组键值对,通过哈希值前8位(tophash)加速匹配,冲突时链接溢出桶。访问时,根据哈希值后B位定位桶,再匹配tophash和key完成查找。当装载因子超6.5或溢出桶过多时触发扩容:等量扩容整理稀疏数据,翻倍扩容增加桶数。扩容采用渐进式驱逐,写操作时增量迁移旧桶数据,避免性能抖动,确保O(1)时间复杂度的存取效率。
本文深入剖析Go语言string与切片的底层原理。string底层由`stringStruct`(含指针与长度)构成,长度表示字节数而非字符数,采用UTF-8编码,遍历依赖`runtime/utf8.go`自动解码为rune,切分需先转rune数组。切片底层为`slice`结构体(含指针、长度、容量),创建方式有字面量(编译期完成)与`make`(运行时调用`runtime.makeslice`),扩容规则为:长度<1024时容量翻倍,≥1024时增25%,且扩容并发不安全。掌握这些原理对优化内存、提升代码性能与稳定性至关重要。
Go语言(Golang)以简洁、快速、安全的设计哲学,在云计算、微服务等领域备受青睐。其核心特点包括:跨平台编译生成二进制文件,无虚拟化损失;自带runtime支持内存管理、垃圾回收及原生并发能力,简化开发。编译过程涵盖前端词法/句法/语义分析,后端生成SSA中间码(便于问题定位)及机器码;启动时通过runtime初始化协程调度,最终在协程中执行用户main函数,兼顾高效性与便捷性,成为现代开发的高效选择。
本文记录了AscendC学习笔记,涵盖从基础概念到算子开发的完整流程。核心内容包括:AI Core的达芬奇架构(物理结构含Cube/Vector/Scalar单元,逻辑结构为SIMD);AscendC编程对象GlobalTensor(外部存储)与LocalTensor(内部存储),以及Queue队列通信机制;Vector算子开发遵循分析、核函数定义、三阶段任务(CopyIn/Compute/CopyOut)的范式;Host侧实现涉及Tiling数据切分、Shape推导及算子注册。通过Add算子实例,展示了静态形状下多核并行(SPMD)与单核流水(Stage)的开发实践。
现代人常因忙碌陷入精神空虚,需反思行动与内在的关系。作者提出三点核心思悟:其一,承认“小我”的存在,避免否定或放任,通过统一“身口意”(所思、所言、所行)实现内在和谐;其二,以“如实”面对内在与外在,避免脱节导致的内耗,让行为真实反映生命需求;其三,以“觉知”修行,超越任性真实,在“事上炼”中保持生命鲜活,用天性而非习性生活。最终,回归生命源头,用状态而非观念活出真实与生机。